代码之家  ›  专栏  ›  技术社区  ›  the_drow

如何检查数组的某个部分是否存在于另一个数组中?

  •  1
  • the_drow  · 技术社区  · 15 年前

    我有两个关联数组,我想检查一下

    $array1["foo"]["bar"]["baz"] exists in $array2["foo"]["bar"]["baz"]
    

    价值观并不重要,只是“路径”。 做 array_ intersect_ assoc 做我需要的吗?
    如果没有,我怎么能自己写?

    2 回复  |  直到 15 年前
        1
  •  4
  •   Ken Keenan    15 年前

    试试这个:

    <?php
    function array_path_exists(&$array, $path, $separator = '/')
    {
        $a =& $array;
        $paths = explode($separator, $path);
        $i = 0;
        foreach ($paths as $p) {
            if (isset($a[$p])) {
                if ($i == count($paths) - 1) {
                    return TRUE;
                }
                elseif(is_array($a[$p])) {
                    $a =& $a[$p];
                }
                else {
                    return FALSE;
                }
            }
            else {
                return FALSE;
            }
            $i++;
        }
    }
    
    // Test
    $test = array(
        'foo' => array(
            'bar' => array(
                'baz' => 1
                )
            ),
        'bar' => 1
        );
    
    echo array_path_exists($test, 'foo/bar/baz');
    
    ?>
    
        2
  •  0
  •   Glass Robot    15 年前

    如果只需要检查键是否存在,可以使用简单的if语句。

    <?php
    if (isset($array1["foo"]["bar"]["baz"]) && isset($array2["foo"]["bar"]["baz"]
    

    ){ /存在 }