Php 对多维数组使用array_search和unset()

Php 对多维数组使用array_search和unset(),php,multidimensional-array,Php,Multidimensional Array,我试图在多维数组中搜索一个名为“test4”的值。该数组如下所示: Array ( [0] => Array ( [VlanId] => Array ( [0] => 2 ) [Name] => Array ( [0] =&g

我试图在多维数组中搜索一个名为“test4”的值。该数组如下所示:

Array
(
    [0] => Array
        (
            [VlanId] => Array
                (
                    [0] => 2
                )

            [Name] => Array
                (
                    [0] => test2
                )

        )

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

            [Name] => Array
                (
                    [0] => test3
                )

        )

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

            [Name] => Array
                (
                    [0] => test4
                )

        )
foreach (new RecursiveIteratorIterator(new RecursiveArrayIterator($vlans)) as $key=>$value) {
    if ($value == 'test4') {
             print 'fount it. the key is: '. $key .' and value is: '. $value;
        break;
    }
}
我发现了以下帖子:

我使用rescursiveiterator方法来找到test4的值。我的代码如下所示:

Array
(
    [0] => Array
        (
            [VlanId] => Array
                (
                    [0] => 2
                )

            [Name] => Array
                (
                    [0] => test2
                )

        )

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

            [Name] => Array
                (
                    [0] => test3
                )

        )

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

            [Name] => Array
                (
                    [0] => test4
                )

        )
foreach (new RecursiveIteratorIterator(new RecursiveArrayIterator($vlans)) as $key=>$value) {
    if ($value == 'test4') {
             print 'fount it. the key is: '. $key .' and value is: '. $value;
        break;
    }
}
这将提供以下输出:

说吧。键为:0,值为:test4

我无法使用此命令取消设置test4记录,因为[0]刚刚取消设置outtermost数组中的第一项。。。在本例中,它将删除名为test2的vlanid2

一旦我找到记录test4,你能帮我弄清楚如何删除它吗? 我试着阅读以下帖子:

但我不太明白如何解决这个问题

谢谢

编辑1:

        foreach ($vlans as $a=>$value) {
            if ($value['Name'][0] =='test4' ){
                echo 'found it at: '. $value;
                unset($vlans[$a]);
                break;
            }   
          } 

$array
视为最外层的数组:

foreach ($array as $a) {
    if ($a['Name'][0]) == 'test4') { ... }
}

这是一个更健壮的解决方案,可用于任何多维数组并返回一个键路径数组。它在
$haystack
中搜索
$needle
,如果在数组中找到,则返回密钥路径数组,如果未找到,则返回
false

function arraySearchRecursive($needle, $haystack, $strict=false, $path=array()) {
    if(!is_array($haystack)) {
        return false;
    }

    foreach ($haystack as $key => $val) {
        if(is_array($val) && $subPath = array_searchRecursive($needle, $val, $strict, $path)) {
            $path = array_merge($path, array($key), $subPath);
            return $path;
        } elseif ((!$strict && $val == $needle) || ($strict && $val === $needle)) {
            $path[] = $key;
            return $path;
        }
    }

    return false; // value not in array!

}

显然,您需要在其他地方查找,因为
递归迭代器
不能满足您的需要。实际的键是
[2]['Name'][0]
,但您已经知道了。实际上,我的理解是递归迭代器做我想做的事情,因为它找到了我要找的值。。。这是我需要弄清楚的未解决的部分??也许我错了..在给定的情况下有效,但对正在搜索的数组的性质做出了一个糟糕的假设。但是这可能就是答案。:)@戈登弗里曼,是的,但他说阵列看起来是这样的。因此,这是最高效、最简单且无类的解决方案。:)@杰弗里。实际上,我认为您的示例缺少一个数组…它嵌套在3个级别中。但是非常感谢。我调整了你的例子。。。解决了我的问题。我想要的答案是如何取消数组中的记录。。。但是你的评论给了我提示。@dot,我的例子也有三个层次:1)
foreach
2)
['Name']
3)
[0]
@Jeffrey…嗯。。。有了你的exmaple,我再也找不到唱片了。查看我在帖子中的编辑1-我已经添加了我的解决方案,谢谢。我会复习以便更好地理解。但是一旦我找到了记录,我该如何撤销它呢?