回答

收藏

在 PHP 中从数组中删除一个元素

技术问答 技术问答 461 人阅读 | 0 人回复 | 2023-09-11

有没有一种简单的方法可以用 PHP 从数组中删除一个元素foreach ($array)不再包含这个元素?
; v, t- c1 B5 }5 B我认为把它设置为null可以做到这一点,但显然不起作用。7 l( K; ~7 e; ]$ _& u- f' J3 r
                                                               
: H9 F2 t1 c" ~  Y6 ]    解决方案:                                                               
) }6 s2 O5 L, l! h0 N                                                                删除数组元素的方法有很多,其中一些比其他方法更有用。0 k6 k2 M) n) {! F  A" U
删除单个数组元素如果您只想删除数组元素,您可以使用它unset()或者\array_splice().( N# G' ]' c' `1 w) v) Y, R
如果您知道值并且不知道删除元素的键,您可以使用它\array_search()获取键。这只有在元素不多次出现时才有效,因为\array_search仅返回第一次命中。/ y  u( k6 }* W, c" i
unset()使用时请注意unset()数组键不会改变。如果需要重新索引,可以使用。\array_values()after的键unset(),这将把所有键转换成从 0 开始的数字枚举键。& R6 q9 F) Z* i4 z1 n0 T, \* e2 v
代码:
( K  Z& t1 R6 ^& ~4 _& f
    $array = [0 => "a",1 => "b",2 => "c"];unset($array[1]);         ↑ Key which you want to delete9 P3 |& J! N# T9 i9 a7 x
输出:
  q9 H; t" G3 v
        [0] => a    [2] => c]
      x' S2 B, b( O( _
\array_splice()方法如果您使用\array_splice()这些键会自动重新索引,但关联键不会改变 - 与 相反\array_values(),它将所有键转换为数字键。
1 w# b% G9 i8 i8 `\array_splice()需要offset而不是key作为第二个参数。
$ k" [# p* ~* e7 y. ]8 j+ O代码:
5 o7 \, d# ?* k' @. ]# u. |9 j
    $array = [0 => "a",1 => "b",2 => "c"];\array_splice($array,1、1);                ↑ Offset which you want to delete# y; H2 t3 w; V1 ~
输出:
& P/ H1 [  [4 X: g% i; n$ h
        [0] => a    [1] => c]
    1 c4 K' H) n6 u0 O# A3 W4 e
array_splice(),和 一样unset(),通过引用获数组。您不会将这些函数的返回值分配回数组。6 A1 @6 o  `  z/ E" Q+ q2 P
删除多个数组元素想删除多个数组元素,不想调用unset()或\array_splice()多次调用使用函数\array_diff()或\array_diff_key()取决于您是否知道要删除的元素的值或键。
/ W- R+ x, C; O. r* E6 N7 K\array_diff()方法如果您知道要删除的数组元素的值,可以使用\array_diff(). 和以前一样,unset()它不会更改数组的键。
! E  k* G! G" n0 H( X  K3 V7 E代码:
) l/ S/ b! x6 g2 K4 ~8 e- u3 d3 Q
    $array = [0 => "a",1 => "b",2 => "c",3 => "c"];$array = \array_diff($array,["a","c"]);                     └────────┘                     Array values which you want to delete4 O* s3 A2 ~6 h4 ]5 g; [. Q2 \  b
输出:
5 W4 @9 j6 q  x$ c$ Z
        [1] => b]' W' r1 F0 e% N
\array_diff_key()方法如果您知道要删除的元素的键,那么您要使用\array_diff_key(). 您必须确保将键作为第二个参数中的键,而不是作为值传输。键不会重新索引。8 r7 K- U4 k3 J: ~
代码:
0 F2 o! F2 l5 M
    $array = [0 => "a",1 => "b",2 => "c"];$array = \array_diff_key($array,[0 => "xy","2" => "xy"]);                         ↑           ↑                         Array keys which you want to delete9 k' O2 {" h9 X; V& ]2 g3 A
输出:2 e0 E, j3 W! r
        [1] => b]
    ; W1 \7 r) T" u1 w" W
如果要使用unset()或\array_splice()删除具有相同值的多个元素,可使用\array_keys()获取具体值的所有键,然后删除所有元素。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则