在PHP中删除数组中的元素
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在PHP中删除数组中的元素相关的知识,希望对你有一定的参考价值。
有没有一种简单的方法可以使用php从数组中删除元素,这样foreach ($array)
不再包含该元素?
我认为将它设置为null
会做到这一点,但显然它不起作用。
删除数组元素有不同的方法,其中一些对某些特定任务比其他任务更有用。
Delete one array element
如果您只想删除一个数组元素,可以使用\unset()
或\array_splice()
。
此外,如果您有值并且不知道删除元素的键,您可以使用\array_search()
来获取密钥。
\unset()
method
请注意,当您使用\unset()
时,数组键不会更改/重新索引。如果要重新索引键,可以在\array_values()
之后使用\unset()
,它将所有键转换为从0开始的数字枚举键。
码
<?php
$array = [0 => "a", 1 => "b", 2 => "c"];
\unset($array[1]);
//↑ Key which you want to delete
?>
产量
[
[0] => a
[2] => c
]
\array_splice()
method
如果使用\array_splice()
,键将自动重新索引,但关联键不会改变,而\array_values()
将把所有键转换为数字键。
\array_splice()
也需要偏移,而不是关键!作为第二个参数。
码
<?php
$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()
通过引用获取数组,这意味着您不希望将这些函数的返回值分配回数组。
Delete multiple array elements
如果要删除多个数组元素并且不想多次调用\unset()
或\array_splice()
,则可以使用函数\array_diff()
或\array_diff_key()
,具体取决于您是否知道要删除的元素的值或键。
\array_diff()
method
如果您知道要删除的数组元素的值,则可以使用\array_diff()
。和之前的\unset()
一样,它不会改变/重新索引数组的键。
码
<?php
$array = [0 => "a", 1 => "b", 2 => "c"];
$array = \array_diff($array, ["a", "c"]);
//└────────┘→ Array values which you want to delete
?>
产量
[
[1] => b
]
\array_diff_key()
method
如果您知道要删除的元素的键,则需要使用\array_diff_key()
。在这里,您必须确保将键作为键传递给第二个参数而不是值。否则,你必须用\array_flip()
翻转数组。而且这里的密钥不会改变/重新索引。
码
<?php
$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_diff
:
$array = array(3, 9, 11, 20);
$array = array_diff($array, array(11) ); // removes 11
在这种情况下,不必搜索/使用密钥。
如果您必须删除数组中的多个值,并且该数组中的条目是对象或结构化数据,那么[array_filter][1]
是您最好的选择。将保留那些从回调函数返回true的条目。
$array = [
['x'=>1,'y'=>2,'z'=>3],
['x'=>2,'y'=>4,'z'=>6],
['x'=>3,'y'=>6,'z'=>9]
];
$results = array_filter($array, function($value)
return $value['x'] > 2;
); //=> [['x'=>3,'y'=>6,z=>'9']]
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();
?>
关联数组
对于关联数组,请使用unset
:
$arr = array('a' => 1, 'b' => 2, 'c' => 3);
unset($arr['b']);
// RESULT: array('a' => 1, 'c' => 3)
数字数组
对于数值数组,请使用array_splice
:
$arr = array(1, 2, 3);
array_splice($arr, 1, 1);
// RESULT: array(0 => 1, 1 => 3)
Note
使用unset
作为数值数组不会产生错误,但它会搞乱你的索引:
$arr = array(1, 2, 3);
unset($arr[1]);
// RESULT: array(0 => 1, 2 => 3)
如果需要从关联数组中删除多个元素,可以使用array_diff_key()(此处与array_flip()一起使用):
$my_array = array(
"key1" => "value 1",
"key2" => "value 2",
"key3" => "value 3",
"key4" => "value 4",
"key5" => "value 5",
);
$to_remove = array("key2", "key4");
$result = array_diff_key($my_array, array_flip($to_remove));
print_r($result);
输出:
Array ( [key1] => value 1 [key3] => value 3 [key5] => value 5 )
// Remove by value
function removeFromArr($arr, $val)
unset($arr[array_search($val, $arr)]);
return array_values($arr);
假设您有以下数组:
Array
(
[user_id] => 193
[storage] => 5
)
要删除storage
,请执行以下操作:
unset($attributes['storage']);
$attributes = array_filter($attributes);
你得到:
Array
(
[user_id] => 193
)
我只想说我有一个具有变量属性的特定对象(它基本上映射了一个表,我正在更改表中的列,因此反映表的对象中的属性也会有所不同):
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数组内容以反映新属性。
遵循默认功能:
一世)
$Array = array("test1", "test2", "test3", "test3");
unset($Array[2]);
II)
$Array = array("test1", "test2", "test3", "test3");
array_pop($Array);
以上是关于在PHP中删除数组中的元素的主要内容,如果未能解决你的问题,请参考以下文章