PHP - 查找比较两个多维数组的值

时间:2014-01-23 08:20:31

标签: php arrays multidimensional-array

我在这里有两个multi-dimensional arrays

由于$ a数组,你如何获得$ b数组中的image_to_get值?

$a = array(
    'thumbs' => array(
        '0' => array(
            'thumb1a' => array(
                '0' => array(
                    'thumb1' => ""
                )
            )
        )
    )
);

$b = array(
    'thumbs' => array(
        '0' => array(
            'thumb1a' => array(
                '0' => array(
                    'thumb1' => "image_to_get"
                )
            ),
            'thumb2' => 'image2',
            'thumb3' => 'image3',
            'thumb4' => 'image4',
            'thumb5' => 'image5',
        )
    )
);

1 个答案:

答案 0 :(得分:0)

您可以尝试:

function getAPath($array) {
    if (empty($array)) {
        return array();
    }
    $key = key($array);

    return array_merge(array($key), getAPath($array[$key]));
}
function getBValue($array, $path) {
    $key = array_shift($path);

    if (is_null($key) || empty($array)) {
        return $array;
    }

    return getBValue($array[$key], $path);
}

$aPath  = getAPath($a);
$bValue = getBValue($b, $aPath);
var_dump($bValue);

第一个函数getAPath将您的$a数组展平为:

array (size=5)
  0 => string 'thumbs' (length=6)
  1 => int 0
  2 => string 'thumb1a' (length=7)
  3 => int 0
  4 => string 'thumb1' (length=6)

第二个函数getBValue使用$b遍历$aPath数组。

低于可爱的单行; - )

function getAPath($array) {
    return empty($array) ? array() : array_merge(array($key = key($array)), getAPath($array[$key]));
}
function getBValue($array, $path) {
    return (is_null($key = array_shift($path)) || empty($array)) ? $array :  getBValue($array[$key], $path);
}