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です。

[0]は最外部配列の最初の項目の設定を解除するだけなので、これを使用してtest4レコードの設定を解除することはできません...この場合、test2という名前のVlanID2が削除されます。

レコード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 に答える