有没有一种简单的方法可以使用从数组中删除元素 PHP
这样的 foreach ($array)
不再包含那个元素?
我认为把它设置为 null
会这样做,但显然它不起作用。
有没有一种简单的方法可以使用从数组中删除元素 PHP
这样的 foreach ($array)
不再包含那个元素?
我认为把它设置为 null
会这样做,但显然它不起作用。
删除数组元素有不同的方法,其中一些对某些特定任务比其他任务更有用。
如果您只想删除一个可以使用的数组元素 unset()
或替代 array_splice()
。
此外,如果您有值并且不知道删除可以使用的元素的键 array_search()
得到钥匙。
unset()
方法请注意,使用时 unset()
数组键不会更改/重新索引。如果要重新索引可以使用的键 array_values()
后 unset()
它将所有键转换为从0开始的数字枚举键。
码
<?php
$array = array(0 => "a", 1 => "b", 2 => "c");
unset($array[1]);
//↑ Key which you want to delete
?>
产量
Array (
[0] => a
[2] => c
)
array_splice()
方法如果你使用 array_splice()
键将自动重新索引,但关联键不会改变而不是 array_values()
这会将所有键转换为数字键。
也 array_splice()
需要偏移,而不是关键!作为第二个参数。
码
<?php
$array = array(0 => "a", 1 => "b", 2 => "c");
array_splice($array, 1, 1);
//↑ Offset which you want to delete
?>
产量
Array (
[0] => a
[1] => c
)
array_splice()
与...一样 unset()
通过引用获取数组,这意味着您不希望将这些函数的返回值分配回数组。
如果要删除多个数组元素而不想调用 unset()
要么 array_splice()
您可以多次使用这些功能 array_diff()
要么 array_diff_key()
取决于您是否知道要删除的元素的值或键。
array_diff()
方法如果您知道要删除的数组元素的值,则可以使用 array_diff()
。和以前一样 unset()
它不会改变/重新索引数组的键。
码
<?php
$array = array(0 => "a", 1 => "b", 2 => "c");
$array = array_diff($array, ["a", "c"]);
//└────────┘→ Array values which you want to delete
?>
产量
Array (
[1] => b
)
array_diff_key()
方法如果您知道要删除的元素的键,则需要使用 array_diff_key()
。在这里,您必须确保将键作为键传递到第二个参数而不是值。否则,你必须翻转数组 array_flip()
。而且这里的密钥不会改变/重新索引。
码
<?php
$array = array(0 => "a", 1 => "b", 2 => "c");
$array = array_diff_key($array, [0 => "xy", "2" => "xy"]);
//↑ ↑ Array keys which you want to delete
?>
产量
Array (
[1] => b
)
此外,如果你想使用 unset()
要么 array_splice()
删除具有相同值的多个元素 array_keys()
获取特定值的所有键,然后删除所有元素。
应当指出的是 unset()
将保持索引不变,这是您在使用字符串索引(数组作为哈希表)时所期望的,但在处理整数索引数组时可能会非常令人惊讶:
$array = array(0, 1, 2, 3);
unset($array[2]);
var_dump($array);
/* array(3) {
[0]=>
int(0)
[1]=>
int(1)
[3]=>
int(3)
} */
$array = array(0, 1, 2, 3);
array_splice($array, 2, 1);
var_dump($array);
/* array(3) {
[0]=>
int(0)
[1]=>
int(1)
[2]=>
int(3)
} */
所以 array_splice()
如果你想规范化整数键,可以使用它。另一种选择是使用 array_values()
后 unset()
:
$array = array(0, 1, 2, 3);
unset($array[2]);
$array = array_values($array);
var_dump($array);
/* array(3) {
[0]=>
int(0)
[1]=>
int(1)
[2]=>
int(3)
} */
// our initial array
$arr = array("blue", "green", "red", "yellow", "green", "orange", "yellow", "indigo", "red");
print_r($arr);
// remove the elements who's values are yellow or red
$arr = array_diff($arr, array("yellow", "red"));
print_r($arr);
这是上面代码的输出:
Array
(
[0] => blue
[1] => green
[2] => red
[3] => yellow
[4] => green
[5] => orange
[6] => yellow
[7] => indigo
[8] => red
)
Array
(
[0] => blue
[1] => green
[4] => green
[5] => orange
[7] => indigo
)
现在,array_values()将很好地重新索引数值数组,但将从数组中删除所有键字符串并用数字替换它们。如果需要保留键名(字符串),或者如果所有键都是数字键,则重新索引数组,使用array_merge():
$arr = array_merge(array_diff($arr, array("yellow", "red")));
print_r($arr);
输出
Array
(
[0] => blue
[1] => green
[2] => green
[3] => orange
[4] => indigo
)
$key = array_search($needle,$array);
if($key!==false){
unset($array[$key]);
}
unset($array[$index]);
如果你有一个数字索引数组,其中所有值都是唯一的(或者它们是非唯一的,但你希望删除特定值的所有实例),你可以简单地使用array_diff()删除匹配的元素,如下所示:
$my_array = array_diff($my_array, array('Value_to_remove'));
例如:
$my_array = array('Andy', 'Bertha', 'Charles', 'Diana');
echo sizeof($my_array) . "\n";
$my_array = array_diff($my_array, array('Charles'));
echo sizeof($my_array);
这显示以下内容:
4
3
在此示例中,将删除值为“Charles”的元素,因为可以通过sizeof()调用验证,该调用报告初始数组的大小为4,删除后的大小为3。
此外,对于命名元素:
unset($array["elementName"]);
销毁数组的单个元素
unset()
$array1 = array('A', 'B', 'C', 'D', 'E');
unset($array1[2]); // Delete known index(2) value from array
var_dump($array1);
输出将是:
array(4) {
[0]=>
string(1) "A"
[1]=>
string(1) "B"
[3]=>
string(1) "D"
[4]=>
string(1) "E"
}
如果需要重新索引数组:
$array1 = array_values($array1);
var_dump($array1);
然后输出将是:
array(4) {
[0]=>
string(1) "A"
[1]=>
string(1) "B"
[2]=>
string(1) "D"
[3]=>
string(1) "E"
}
从数组末尾弹出元素 - 返回已删除元素的值
mixed array_pop(array &$array)
$stack = array("orange", "banana", "apple", "raspberry");
$last_fruit = array_pop($stack);
print_r($stack);
print_r('Last Fruit:'.$last_fruit); // Last element of the array
输出将是
Array
(
[0] => orange
[1] => banana
[2] => apple
)
Last Fruit: raspberry
从数组中删除第一个元素(红色), - 返回已删除元素的值
mixed array_shift ( array &$array )
$color = array("a" => "red", "b" => "green" , "c" => "blue");
$first_color = array_shift($color);
print_r ($color);
print_r ('First Color: '.$first_color);
输出将是:
Array
(
[b] => green
[c] => blue
)
First Color: red
<?php
$stack = array("fruit1", "fruit2", "fruit3", "fruit4");
$fruit = array_shift($stack);
print_r($stack);
echo $fruit;
?>
输出:
Array
(
[0] => fruit2
[1] => fruit3
[2] => fruit4
)
fruit1
为了避免进行搜索,可以使用 array_diff
:
$array = array(3, 9, 11, 20);
$array = array_diff($array, array(11) ); // removes 11
在这种情况下,不必搜索/使用密钥。
unset()
销毁指定的变量。
的行为 unset()
函数内部可能会有所不同,具体取决于您尝试销毁的变量类型。
如果全球化变量是 unset()
在函数内部,只破坏局部变量。调用环境中的变量将保留与之前相同的值 unset()
被称为。
<?php
function destroy_foo()
{
global $foo;
unset($foo);
}
$foo = 'bar';
destroy_foo();
echo $foo;
?>
上面代码的答案将是 酒吧
至 unset()
函数内部的全局变量
<?php
function foo()
{
unset($GLOBALS['bar']);
}
$bar = "something";
foo();
?>