回答

收藏

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

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

有没有一种简单的方法可以用 PHP 从数组中删除一个元素foreach ($array)不再包含这个元素?
0 O: }- V& Y  O9 S$ ^% d我认为把它设置为null可以做到这一点,但显然不起作用。
7 K$ }% ~3 b& {$ X                                                               
6 I# b' y, O8 |) {    解决方案:                                                                ! V# ?+ [' X+ P( T
                                                                删除数组元素的方法有很多,其中一些比其他方法更有用。
+ U: h3 T) b+ d( I. o- H$ S删除单个数组元素如果您只想删除数组元素,您可以使用它unset()或者\array_splice()." X& n2 W5 z7 n2 G* g" n& ^
如果您知道值并且不知道删除元素的键,您可以使用它\array_search()获取键。这只有在元素不多次出现时才有效,因为\array_search仅返回第一次命中。3 Q) w2 Z6 j9 r
unset()使用时请注意unset()数组键不会改变。如果需要重新索引,可以使用。\array_values()after的键unset(),这将把所有键转换成从 0 开始的数字枚举键。. I0 [) r5 a7 f1 x" p
代码:
+ h4 @0 P; T; A/ [0 r) h
    $array = [0 => "a",1 => "b",2 => "c"];unset($array[1]);         ↑ Key which you want to delete/ s; H/ _9 p- L; N7 w$ v* ]9 x6 \# q
输出:
6 r4 e: ~: N+ T% J6 x3 E
        [0] => a    [2] => c]
    3 e- I0 l2 y7 }/ t
\array_splice()方法如果您使用\array_splice()这些键会自动重新索引,但关联键不会改变 - 与 相反\array_values(),它将所有键转换为数字键。3 [8 L! U" F! v
\array_splice()需要offset而不是key作为第二个参数。8 Y7 F0 d3 v3 f' q
代码:
4 z. }- y& u+ Z' R  S1 F
    $array = [0 => "a",1 => "b",2 => "c"];\array_splice($array,1、1);                ↑ Offset which you want to delete
    9 ~- o0 J& k- }  Q2 Q: E# \
输出:
% w6 ?6 Z1 k) ~
        [0] => a    [1] => c]
    * C2 M4 _& ?+ t
array_splice(),和 一样unset(),通过引用获数组。您不会将这些函数的返回值分配回数组。
$ U; M% s: V4 H( o6 n删除多个数组元素想删除多个数组元素,不想调用unset()或\array_splice()多次调用使用函数\array_diff()或\array_diff_key()取决于您是否知道要删除的元素的值或键。
& W( e# l# O( }7 o\array_diff()方法如果您知道要删除的数组元素的值,可以使用\array_diff(). 和以前一样,unset()它不会更改数组的键。
6 O4 n% l, d2 L" [9 X, G3 ~( l代码:
8 w. N, o/ q9 S5 p0 X
    $array = [0 => "a",1 => "b",2 => "c",3 => "c"];$array = \array_diff($array,["a","c"]);                     └────────┘                     Array values which you want to delete
    : q2 o4 m* j2 a9 n. c% n- E
输出:
7 A* s  d0 S! Q2 [& K5 N! X
        [1] => b]5 D# [6 W9 d$ a- f' _
\array_diff_key()方法如果您知道要删除的元素的键,那么您要使用\array_diff_key(). 您必须确保将键作为第二个参数中的键,而不是作为值传输。键不会重新索引。
) |* @$ U9 ^/ N) D- C; e5 L代码:  h- v; N- X( P. B- x3 p1 W/ V
    $array = [0 => "a",1 => "b",2 => "c"];$array = \array_diff_key($array,[0 => "xy","2" => "xy"]);                         ↑           ↑                         Array keys which you want to delete
    9 \5 S. E0 C9 A; j, U
输出:
: m; K# r4 V$ n( T: Y! c
        [1] => b]4 s. r: N( t+ c- k. \; e1 w" H( `
如果要使用unset()或\array_splice()删除具有相同值的多个元素,可使用\array_keys()获取具体值的所有键,然后删除所有元素。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则