PHP - 多维数组中删除元素 [英] PHP - remove element in multidimensional array

查看:263
本文介绍了PHP - 多维数组中删除元素的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有这样的数组:

 阵列(
[0] =>阵列([0] => B [1] = D 1和D [2] => ** C ** [3] =>一种[4] =&GT)[1] =>阵列([0] => ** C ** [1] =>一种[2] = D 1和D [3] => [4] =&GT)[2] =>阵列([0] => B [1] = D 1和D [2] =>一种[3] => [4] =&GT)[3] =>阵列([0] => ** C ** [1] = D 1和D [2] =>一种[3] => B [4] =&GT))

和需要删除的所有元素,其中值为C,使得一种结束(未设置):

 阵列(
[0] =>阵列(** [0] => B [1] = D 1和D [2] =>一种[3] => [4] => **)[1] =>阵列(** [0] =>一种[1] = D 1和D [2] => [3] => **)[2] =>阵列([0] => B [1] = D 1和D [2] =>一种[3] => [4] =&GT)[3] =>阵列(** [0] = D 1和D [1] =>一种[2] => B [3] => **))

的元素被除去,并且将其他元素升档。我知道,未设置不重新索引的数组。不能得到未设置为所有多维数组,但只有一个阵列。可以在阵列上进行事后重新索引?鸭preciate它。

在code节中删除的元素,其中的值等于C,但第一个元素的索引是不重新索引。任何人都可以提出一个解决方案,以重新索引内的阵列?

  $ I = 0;
的foreach($数组作为$ VAL)
    {
    的foreach($ VAL为$关键=> $ final_val)
        {        如果($ final_val ==$ search_value)
            {
             未设置($数组[$ i] [$关键]);
            }
        }
    I = $ I + 1;
    }


解决方案

以下code会做你想要什么:

 < PHP
$ A = 1;
$ B = 2;
$ C = 3;
$ D = 4;$ ARR =阵列(
阵列($ B,$ D,$ C $ A,$ B)
阵列($ C $ A),
阵列($ B,$ D,$ C)
阵列($ C,$ D,$ A,$ B,$ B)
);
回声前:\\ n;
的print_r($ ARR);的foreach($改编为$ K1 => $ Q){
  的foreach($ Q $为K2 => $ R){
    如果($ R == $ C){
      未设置($改编[$ K1] [$ K2]);
    }
  }
}
回声后:\\ n;
的print_r($ ARR);
?>

输出:

 前:
排列

    [0] =>排列
        (
            [0] => 2
            [1] => 4
            [2] => 3
            [3] => 1
            [4] => 2
        )    [1] =>排列
        (
            [0] => 3
            [1] => 1
        )    [2] =>排列
        (
            [0] => 2
            [1] => 4
            [2] => 3
        )    [3] =>排列
        (
            [0] => 3
            [1] => 4
            [2] => 1
            [3] => 2
            [4] => 2
        ))
后:
排列

    [0] =>排列
        (
            [0] => 2
            [1] => 4
            [3] => 1
            [4] => 2
        )    [1] =>排列
        (
            [1] => 1
        )    [2] =>排列
        (
            [0] => 2
            [1] => 4
        )    [3] =>排列
        (
            [1] => 4
            [2] => 1
            [3] => 2
            [4] => 2
        ))

正如你所看到的,所有的都走了 3 ...

I have this array:

Array ( 
[0] => Array ( [0] => b [1] => d [2] => **c** [3] =>a [4] => ) 

[1] => Array ( [0] => **c** [1] => a [2] => d [3] => [4] => ) 

[2] => Array ( [0] => b [1] => d [2] => a [3] => [4] => )

[3] => Array ( [0] => **c** [1] => d [2] => a [3] =>b [4] => )

)

and need to delete (unset?) all elements where value is "c" so that one ends up with:

Array ( 
[0] => Array ( **[0] => b [1] => d [2] => a [3] => [4] =>** ) 

[1] => Array ( **[0] => a [1] => d [2] => [3] =>** ) 

[2] => Array ( [0] => b [1] => d [2] => a [3] => [4] => )

[3] => Array ( **[0] => d [1] => a [2] =>b [3] =>** )

)

The element gets removed, and the other elements to shift up. I know that unset does not re-index the array. Cannot get to unset for all multidimensional arrays, but only with one array. Can the arrays be re-indexed afterwards? Appreciate it.

The code BELOW removes elements where the value is equal to "c" but the index of the first element is not re-indexed. Can anyone suggest a solution to re-indexing the inner arrays?

$i=0;
foreach ($array as $val)
    {
    foreach ($val as $key => $final_val)
        { 

        if ($final_val =="$search_value") 
            {
             unset($array[$i][$key]);
            }
        } 
    i = $i + 1;
    }

解决方案

The following code will do what you want:

<?php
$a = 1;
$b = 2;
$c = 3;
$d = 4;

$arr = array(
array ( $b, $d, $c, $a, $b),
array ($c, $a),
array ( $b, $d,  $c ),
array( $c, $d, $a, $b, $b)
);
echo "before:\n";
print_r($arr);

foreach($arr as $k1=>$q) {
  foreach($q as $k2=>$r) {
    if($r == $c) {
      unset($arr[$k1][$k2]);
    }
  }
}
echo "after:\n";
print_r($arr);
?>

Output:

before:
Array
(
    [0] => Array
        (
            [0] => 2
            [1] => 4
            [2] => 3
            [3] => 1
            [4] => 2
        )

    [1] => Array
        (
            [0] => 3
            [1] => 1
        )

    [2] => Array
        (
            [0] => 2
            [1] => 4
            [2] => 3
        )

    [3] => Array
        (
            [0] => 3
            [1] => 4
            [2] => 1
            [3] => 2
            [4] => 2
        )

)
after:
Array
(
    [0] => Array
        (
            [0] => 2
            [1] => 4
            [3] => 1
            [4] => 2
        )

    [1] => Array
        (
            [1] => 1
        )

    [2] => Array
        (
            [0] => 2
            [1] => 4
        )

    [3] => Array
        (
            [1] => 4
            [2] => 1
            [3] => 2
            [4] => 2
        )

)

As you can see, all the 3's have gone...

这篇关于PHP - 多维数组中删除元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆