Php 如何从数组中删除与索引相同的值?

Php 如何从数组中删除与索引相同的值?,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

[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谢谢你告诉我。更正