Php 如何从数组中删除与索引相同的值?
如何从数组中删除值58Php 如何从数组中删除与索引相同的值?,php,arrays,Php,Arrays,如何从数组中删除值58 [58] => Array // <- key here ( [0] => 58 // <- match value here [1] => 59 [2] => 61 [3] => 67 ) 如果要删除$array[58]的条目,可以使用unset unset($array[58]); // this remove all the subarray
[58] => Array // <- key here
(
[0] => 58 // <- match value here
[1] => 59
[2] => 61
[3] => 67
)
如果要删除$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]);
}
假设数组有多个索引,如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);
输出:-一维数组或多维数组
参考:-
如果你有一个多维数组,比如说,N个元素,其中有M个项目,其中N和M是大于0的整数,你想将其应用于所有元素,你可以:
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]);
使用array_search,您可以在大海捞针的地方获取数组的键。这意味着您可以找到与arrays键匹配的值。然后,只需使用unset删除该元素。然后循环并应用上面的函数,看起来是这样的。我们检查数组_搜索是否没有返回布尔值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
)
)
array (
58 =>
array (
1 => 59,
2 => 61,
3 => 67,
),
59 =>
array (
0 => 58,
1 => 60,
2 => 61,
),
60 =>
array (
0 => 59,
4 => 61,
),
)
如您所见,所有子数组都删除了与该数组的索引匹配的元素
使用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);
我认为array_diff是最简洁的,它不需要检查是真是假,它只需要过滤掉子数组中是否存在密钥,如果不存在密钥,它只需要安静地移动。它有一个附加功能,可以在一次操作中删除子数组中出现的所有关键点。我的方法通过引用修改子数组中的$a
代码:
输出:
Array
(
[58] => Array
(
[1] => 59
[2] => 61
[3] => 67
)
[59] => Array
(
[0] => 58
[2] => 61
[3] => 67
)
)
array (
58 =>
array (
1 => 59,
2 => 61,
3 => 67,
),
59 =>
array (
0 => 58,
1 => 60,
2 => 61,
),
60 =>
array (
0 => 59,
4 => 61,
),
)
…如果您想要零索引子数组,您可以像这样添加数组值:$a=array\u valuesarray\u diff$a,[$k] 你有多个像58这样的索引,它们也有一个子数组,也共享你尝试过的东西吗?你的问题不清楚..不,索引是唯一的。我是php新手,所以我没怎么尝试过。值58总是第一个元素吗?@Thamaraiselvam不,它可以是任何我不知道索引值58的地方。我只知道它的价值。在这种情况下,如何做答案更新..因为没有if语句来检查array_search是否可能为false,所以如果在子数组中找不到键,此方法将从子数组中删除第一个元素。“你说得很对,@mickmackusa,我错过了。我更新了答案以反映这一点。谢谢即使找不到钥匙,也会把它拿走。@Andreas谢谢你告诉我。更正