0

我正在尝试在多维数组中搜索一个名为“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
                )

        )

我找到了以下帖子: 搜索多维数组 php

使用 array_search() 在 php 中查找值

我正在使用 rescursiveiterator 方法来查找值 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] 只是取消设置最外层数组中的第一项......在这种情况下,它将删除名为 test2 的 VlanID 2。

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

在php中取消设置多维数组

但无法完全理解如何解决此问题。

谢谢。

编辑1:

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

2 回答 2

1

这是一个更健壮的解决方案,适用于任何多维数组并返回键路径数组。$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!

}

于 2013-01-25T16:53:16.167 回答
1

考虑$array是最外面的数组:

foreach ($array as $a) {
    if ($a['Name'][0]) == 'test4') { ... }
}
于 2013-01-25T16:35:03.680 回答