【问题标题】:How to check if a certain part of the array exists in another array?如何检查数组的某个部分是否存在于另一个数组中?
【发布时间】:2009-08-01 20:10:53
【问题描述】:

我有两个关联数组,我想检查是否

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

值无关紧要,只是“路径”。 array_ intersect_ assoc 能满足我的需要吗?
如果不是我自己怎么写?

【问题讨论】:

  • 你怎么知道你正在寻找路径 ["foo"]["bar"]["baz"]?您从哪里获得信息?
  • 我从 URI 获取输入。

标签: php arrays intersection


【解决方案1】:

试试这个:

<?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');

?>

【讨论】:

  • 我明天测试一下。如果它有效,我可以在我的代码中归功于你吗?
  • 这个问题的链接就可以了——传播这个词! (假设它做你想要的......)
  • 稍作改动:我正在使用这个 preg_match_all('([\w.-]+)', $_SERVER['REQUEST_URI'], $paths);而不是爆炸,因为它不适合我需要的数组。谢谢。
【解决方案2】:

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

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

)) { //存在 }

【讨论】:

  • 如果我知道我需要检查的深度就可以了。如果有不同的输入,也可以是 array1["baz"]["bar"] 存在于 array2["baz"]["bar"] 中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-16
  • 1970-01-01
  • 2020-06-09
相关资源
最近更新 更多