有没有一种简单的方法可以使用PHP从数组中删除元素,从而foreach($array)不再包含该元素?
我以为将其设置为null就可以了,但显然它不起作用。
有没有一种简单的方法可以使用PHP从数组中删除元素,从而foreach($array)不再包含该元素?
我以为将其设置为null就可以了,但显然它不起作用。
当前回答
我只想说,我有一个具有可变属性的特定对象(它基本上映射了一个表,我正在更改表中的列,因此反映表的对象中的属性也会发生变化):
class obj {
protected $fields = array('field1','field2');
protected $field1 = array();
protected $field2 = array();
protected loadfields(){}
// This will load the $field1 and $field2 with rows of data for the column they describe
protected function clearFields($num){
foreach($fields as $field) {
unset($this->$field[$num]);
// This did not work the line below worked
unset($this->{$field}[$num]); // You have to resolve $field first using {}
}
}
}
$fields的全部目的只是,所以当代码发生更改时,我不必查看代码中的任何地方,我只需查看类的开头并更改属性列表和$fields数组内容以反映新属性。
其他回答
使用以下代码:
$arr = array('orange', 'banana', 'apple', 'raspberry');
$result = array_pop($arr);
print_r($result);
删除数组元素有不同的方法,其中一些方法对于某些特定任务比其他方法更有用。
删除单个数组元素
如果只想删除一个数组元素,可以使用unset()或\array_splice()。
如果您知道值,但不知道要删除元素的键,可以使用\array_search()获取键。这只在元素不出现多次时有效,因为\array_search只返回第一次命中。
取消设置()
注意,当您使用unset()时,数组键不会改变。如果要重新索引键,可以在unset()之后使用\array_values(),这会将所有键转换为从0开始的数字枚举键。
代码:
$array = [0 => "a", 1 => "b", 2 => "c"];
unset($array[1]);
// ↑ Key which you want to delete
输出:
[
[0] => a
[2] => c
]
\array_splice()方法
如果使用\array_splice(),键将自动重新索引,但关联键不会更改,而不是\array_values(),后者将所有键转换为数字键。
\array_splice()需要偏移量,而不是键作为第二个参数。
代码:
$array = [0 => "a", 1 => "b", 2 => "c"];
\array_splice($array, 1, 1);
// ↑ Offset which you want to delete
输出:
[
[0] => a
[1] => c
]
array_splice()与unset()相同,通过引用获取数组。您不会将这些函数的返回值分配回数组。
删除多个数组元素
如果要删除多个数组元素,并且不想多次调用unset()或\array_splice(),则可以使用函数\array_diff()或@array_diff_key(),具体取决于您是否知道要删除的元素的值或键。
\array_diff()方法
如果您知道要删除的数组元素的值,那么可以使用\array_diff()。与之前使用unset()一样,它不会更改数组的键。
代码:
$array = [0 => "a", 1 => "b", 2 => "c", 3 => "c"];
$array = \array_diff($array, ["a", "c"]);
// └────────┘
// Array values which you want to delete
输出:
[
[1] => b
]
\array_diff_key()方法
如果您知道要删除的元素的键,则需要使用\array_diff_key()。必须确保将关键帧作为第二个参数中的关键帧传递,而不是作为值传递。密钥无法重新索引。
代码:
$array = [0 => "a", 1 => "b", 2 => "c"];
$array = \array_diff_key($array, [0 => "xy", "2" => "xy"]);
// ↑ ↑
// Array keys which you want to delete
输出:
[
[1] => b
]
如果要使用unset()或\array_splice()删除具有相同值的多个元素,可以使用\array_keys()获取特定值的所有键,然后删除所有元素。
\array_filter()方法
如果要删除数组中具有特定值的所有元素,可以使用\array_filter()。
代码:
$array = [0 => "a", 1 => "b", 2 => "c"];
$array = \array_filter($array, static function ($element) {
return $element !== "b";
// ↑
// Array value which you want to delete
});
输出:
[
[0] => a
[1] => c
]
遵循默认功能:
PHP:未设置
unset()销毁指定的变量。有关更多信息,请参阅PHP unset
$Array = array("test1", "test2", "test3", "test3");
unset($Array[2]);
PHP:array_pop
函数的作用是删除数组的最后一个元素。有关更多信息,请参阅PHP array_pop
$Array = array("test1", "test2", "test3", "test3");
array_pop($Array);
PHP:array_splice
函数的作用是从数组中删除选定的元素,并用新的元素替换它。有关更多信息,请参阅PHP array_spling
$Array = array("test1", "test2", "test3", "test3");
array_splice($Array,1,2);
PHP:array_shift
函数的作用是从数组中删除第一个元素。有关更多信息,请参阅PHP array_shift
$Array = array("test1", "test2", "test3", "test3");
array_shift($Array);
我只想说,我有一个具有可变属性的特定对象(它基本上映射了一个表,我正在更改表中的列,因此反映表的对象中的属性也会发生变化):
class obj {
protected $fields = array('field1','field2');
protected $field1 = array();
protected $field2 = array();
protected loadfields(){}
// This will load the $field1 and $field2 with rows of data for the column they describe
protected function clearFields($num){
foreach($fields as $field) {
unset($this->$field[$num]);
// This did not work the line below worked
unset($this->{$field}[$num]); // You have to resolve $field first using {}
}
}
}
$fields的全部目的只是,所以当代码发生更改时,我不必查看代码中的任何地方,我只需查看类的开头并更改属性列表和$fields数组内容以反映新属性。
<?php
// If you want to remove a particular array element use this method
$my_array = array("key1"=>"value 1", "key2"=>"value 2", "key3"=>"value 3");
print_r($my_array);
if (array_key_exists("key1", $my_array)) {
unset($my_array['key1']);
print_r($my_array);
}
else {
echo "Key does not exist";
}
?>
<?php
//To remove first array element
$my_array = array("key1"=>"value 1", "key2"=>"value 2", "key3"=>"value 3");
print_r($my_array);
$new_array = array_slice($my_array, 1);
print_r($new_array);
?>
<?php
echo "<br/> ";
// To remove first array element to length
// starts from first and remove two element
$my_array = array("key1"=>"value 1", "key2"=>"value 2", "key3"=>"value 3");
print_r($my_array);
$new_array = array_slice($my_array, 1, 2);
print_r($new_array);
?>
输出
Array ( [key1] => value 1 [key2] => value 2 [key3] =>
value 3 ) Array ( [key2] => value 2 [key3] => value 3 )
Array ( [key1] => value 1 [key2] => value 2 [key3] => value 3 )
Array ( [key2] => value 2 [key3] => value 3 )
Array ( [key1] => value 1 [key2] => value 2 [key3] => value 3 )
Array ( [key2] => value 2 [key3] => value 3 )