回答

收藏

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

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

有没有一种简单的方法可以用 PHP 从数组中删除一个元素foreach ($array)不再包含这个元素?
8 f! {; }1 k" x% ?我认为把它设置为null可以做到这一点,但显然不起作用。" g9 w: E* c: P) A4 u
                                                                / F7 P; `! _: ~* f9 q
    解决方案:                                                               
* Z; O5 Y- R. Q9 A2 h- Q0 y1 P                                                                删除数组元素的方法有很多,其中一些比其他方法更有用。# R; o7 f- P0 |6 t9 {0 ^
删除单个数组元素如果您只想删除数组元素,您可以使用它unset()或者\array_splice().6 _' K' l* C$ C: H! S! A2 D; c% Q
如果您知道值并且不知道删除元素的键,您可以使用它\array_search()获取键。这只有在元素不多次出现时才有效,因为\array_search仅返回第一次命中。4 A: y( E7 {& [/ b" |2 ^6 V- \
unset()使用时请注意unset()数组键不会改变。如果需要重新索引,可以使用。\array_values()after的键unset(),这将把所有键转换成从 0 开始的数字枚举键。
: U* N0 V6 l8 ~9 a9 i代码:1 G3 U8 `* f+ G+ j. X+ Z; w! Y6 N( L
    $array = [0 => "a",1 => "b",2 => "c"];unset($array[1]);         ↑ Key which you want to delete4 [5 y% D8 Z; }) }8 A3 i
输出:! Q( I& y4 {. M  m
        [0] => a    [2] => c]5 y4 f4 R, V4 S! I
\array_splice()方法如果您使用\array_splice()这些键会自动重新索引,但关联键不会改变 - 与 相反\array_values(),它将所有键转换为数字键。) t) W: g+ K  g6 _
\array_splice()需要offset而不是key作为第二个参数。% \2 \3 p9 m# @4 ^! e
代码:
9 ?; @# k8 F( K- w" D
    $array = [0 => "a",1 => "b",2 => "c"];\array_splice($array,1、1);                ↑ Offset which you want to delete
    % K% o2 `# N$ W1 _8 B
输出:  W( J8 c& J1 ^8 f
        [0] => a    [1] => c]
    & Z- i! S& ^& o8 D  g5 R+ H
array_splice(),和 一样unset(),通过引用获数组。您不会将这些函数的返回值分配回数组。
# l( H! d/ S' |* f删除多个数组元素想删除多个数组元素,不想调用unset()或\array_splice()多次调用使用函数\array_diff()或\array_diff_key()取决于您是否知道要删除的元素的值或键。( M+ E$ m  R, }
\array_diff()方法如果您知道要删除的数组元素的值,可以使用\array_diff(). 和以前一样,unset()它不会更改数组的键。7 q4 w4 W: K( L8 U) @
代码:& ^6 O1 b2 S' l3 J; C5 o9 y0 X
    $array = [0 => "a",1 => "b",2 => "c",3 => "c"];$array = \array_diff($array,["a","c"]);                     └────────┘                     Array values which you want to delete6 y  A: S% u2 _9 v4 `6 Z
输出:
) S9 H' s  O, y" \) t9 c) Q- K
        [1] => b]
    3 j& R; T, c4 U  Z: o
\array_diff_key()方法如果您知道要删除的元素的键,那么您要使用\array_diff_key(). 您必须确保将键作为第二个参数中的键,而不是作为值传输。键不会重新索引。$ o: o+ ~9 L) I, w
代码:. {  I; c4 q# w
    $array = [0 => "a",1 => "b",2 => "c"];$array = \array_diff_key($array,[0 => "xy","2" => "xy"]);                         ↑           ↑                         Array keys which you want to delete0 J9 W7 u. K' K# i% h5 o: w4 m
输出:  R: \: U% _) p/ ~9 F+ X* l. ?
        [1] => b]
    7 q) A) y" W, _) _
如果要使用unset()或\array_splice()删除具有相同值的多个元素,可使用\array_keys()获取具体值的所有键,然后删除所有元素。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则