|
有没有一种简单的方法可以用 PHP 从数组中删除一个元素foreach ($array)不再包含这个元素?
# @9 O- g; x" U; ^我认为把它设置为null可以做到这一点,但显然不起作用。
. r( S$ l$ D3 b) `* _# u ! G9 |. T$ y1 Q
解决方案:
* d1 {& L7 U1 G0 ?4 W+ H5 p 删除数组元素的方法有很多,其中一些比其他方法更有用。
# T7 u; ?& c5 ^& q4 M) o删除单个数组元素如果您只想删除数组元素,您可以使用它unset()或者\array_splice().
" Y9 M4 c6 l6 Q# q {: i如果您知道值并且不知道删除元素的键,您可以使用它\array_search()获取键。这只有在元素不多次出现时才有效,因为\array_search仅返回第一次命中。; T6 u! B; R) N* z4 x, I
unset()使用时请注意unset()数组键不会改变。如果需要重新索引,可以使用。\array_values()after的键unset(),这将把所有键转换成从 0 开始的数字枚举键。
0 V8 y: {* f: Y4 k代码:: R- B0 L" P& E
$array = [0 => "a",1 => "b",2 => "c"];unset($array[1]); ↑ Key which you want to delete; M6 Z$ k/ Q" M; p3 i ~# ~4 Y# r
输出:- u/ `0 N$ B+ i5 t" }5 N
[0] => a [2] => c]
7 S$ A6 P0 d$ k1 R \array_splice()方法如果您使用\array_splice()这些键会自动重新索引,但关联键不会改变 - 与 相反\array_values(),它将所有键转换为数字键。
9 D3 f5 B3 z4 A2 v\array_splice()需要offset而不是key作为第二个参数。
* y7 t% J. j0 l代码:: Q6 F0 Q/ j& j( m: z8 y
$array = [0 => "a",1 => "b",2 => "c"];\array_splice($array,1、1); ↑ Offset which you want to delete" K) q) e2 W6 n8 M m6 Y+ S
输出:9 z c% F! n e0 I( Z% ?! i) Z& w
[0] => a [1] => c]
# d9 \" d9 W! X: s7 B, z array_splice(),和 一样unset(),通过引用获数组。您不会将这些函数的返回值分配回数组。 V0 u- D2 e+ J$ [% c
删除多个数组元素想删除多个数组元素,不想调用unset()或\array_splice()多次调用使用函数\array_diff()或\array_diff_key()取决于您是否知道要删除的元素的值或键。% ^8 {; G0 u, s. @( g/ j# t5 h
\array_diff()方法如果您知道要删除的数组元素的值,可以使用\array_diff(). 和以前一样,unset()它不会更改数组的键。
; o6 a' P }- {( y, o" W, o代码:
5 r- ^+ \ f! t$array = [0 => "a",1 => "b",2 => "c",3 => "c"];$array = \array_diff($array,["a","c"]); └────────┘ Array values which you want to delete/ G y( i2 A5 ^5 Z2 Z( \2 @! Q/ w/ R. B
输出:
2 h# k4 H$ S7 W0 a+ c* `3 K [1] => b]
; ]) l3 V; c. t" P. t \array_diff_key()方法如果您知道要删除的元素的键,那么您要使用\array_diff_key(). 您必须确保将键作为第二个参数中的键,而不是作为值传输。键不会重新索引。
0 R. K8 j0 D+ ~/ l代码:8 S7 X1 V- |, A$ k& k1 r
$array = [0 => "a",1 => "b",2 => "c"];$array = \array_diff_key($array,[0 => "xy","2" => "xy"]); ↑ ↑ Array keys which you want to delete
3 O+ ` X$ T; C' g% G+ r, M1 J! J 输出:
9 |6 x. y% I, y9 }7 l- R [1] => b]
6 O' \6 e* W% \& M0 T* m3 D( e* m 如果要使用unset()或\array_splice()删除具有相同值的多个元素,可使用\array_keys()获取具体值的所有键,然后删除所有元素。 |
|