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

时间:2017-08-31 06:40:40

标签: php arrays

如何从数组中删除值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
    )

6 个答案:

答案 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(多维数组)

参考: -

PHP unset() function

PHP array_search() function

答案 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);

https://3v4l.org/4gYIo

答案 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]);