如何从数组中删除值58。
[58] => Array // <- key here
(
[0] => 58 // <- match value here
[1] => 59
[2] => 61
[3] => 67
)
在上面的数组中,主数组键(58)匹配键0的子数组值。
我希望数组结果为:
[58] => Array
(
[1] => 59
[2] => 61
[3] => 67
)
答案 0 :(得分:3)
假设您的数组有多个索引,如58,59,60 ....
你需要像下面这样做: -
foreach($array as $key => $val){
if(is_array($val)){
$k = array_search($key,$val);
if($k ===false){
}else{
unset($array[$key][$k]);
}
}
}
print_r($array);
输出: - https://eval.in/853076(一维数组)或https://eval.in/853081(多维数组)
参考: -
答案 1 :(得分:1)
如果要删除$ array [58]的条目,可以使用unset
unset($array[58]); // this remove all the subarray (index 0,1,2,3)
如果要删除$ array [58]的条目0,可以使用
unset($array[58][0]);// this remove only index 0 of subarray
否则,如果您需要根据内容删除,则必须搜索内容
if(($key = array_search($array[58], 58)) !== false) {
unset($array[58][$key]);
}
答案 2 :(得分:0)
使用array_search()
,你可以获得一个数组的键,在那里你可以找到“大海捞针”。这意味着您可以找到与数组键匹配的值。然后,只需使用unset()
删除该元素即可。然后循环并应用上面的函数,它看起来像这样。我们检查array_search()
是否没有返回布尔值false(这就是为什么我们使用typecomparison ===
,或者在这种情况下,!==
)。如果我们只是检查了一个错误的值,那么如果它的索引为0
,则不会删除该值,因为这是一个假值。
$array = array(58 => array(
0 => 58,
1 => 59,
2 => 61,
3 => 67
),
59 => array(
0 => 58,
1 => 59,
2 => 61,
3 => 67
));
foreach ($array as $key=>$value) {
if ($remove_keys = array_search($key, $value) !== false)
unset($array[$key][$remove_keys]);
}
输出:
Array
(
[58] => Array
(
[1] => 59
[2] => 61
[3] => 67
)
[59] => Array
(
[0] => 58
[2] => 61
[3] => 67
)
)
如您所见,所有子数组都删除了与该数组索引匹配的元素。
答案 3 :(得分:0)
使用foreach循环并使用array_search查找匹配数字的键。
$arr["58"] = Array
(
"0" => 58,
"1" => 59,
"2" => 61,
"3" => 67
);
Foreach($arr as $key => &$subarr){
$find = array_search($key, $subarr);
If($find !== false){
unset($subarr[$find]);
}
}
Var_dump($arr);
答案 4 :(得分:0)
我认为array_diff()
最简单,它不需要检查是真还是假,如果密钥存在于子数组中,它只是过滤掉它,如果它不存在它只是静静地继续前进。它具有以下功能:能够在一个动作中删除子阵列中所有出现的键。我的方法通过引用修改$a
(子阵列)。
代码:(Demo)
$array=[58=>[58,59,61,67],59=>[58,60,61],60=>[59,60,60,60,61]];
foreach($array as $k=>&$a){
$a=array_diff($a,[$k]); // key is written as a single-element array
}
var_export($array);
输出:
array (
58 =>
array (
1 => 59,
2 => 61,
3 => 67,
),
59 =>
array (
0 => 58,
1 => 60,
2 => 61,
),
60 =>
array (
0 => 59,
4 => 61,
),
)
...如果你想要零索引子阵列,你可以像这样添加array_values()
:$a=array_values(array_diff($a,[$k]));
答案 5 :(得分:-1)
如果你有一个多维数组,让我们说,N个元素里面有M个项目(其中N和M是整数&gt; 0)你想要将它应用于你可以做的所有这些:< / p>
foreach($array as $key => $subarray) {
if (($subkey = array_search($key, $subarray)) !== false) {
if (is_array($subkey)) {
foreach ($subkey as $idx) {
unset($array[$key][$idx]);
}
} else {
unset($array[$key][$subkey]);
}
}
}
如果您想将子数组的键作为正确的零索引,可以在if
中添加$array[$key] = array_values($array[$key]);