如何从另一个数组的值构建PHP中多维数组的键?

问题描述 投票:2回答:2

我有一个问题,我正在努力解决。

我有两个数组。

一个是

$array1 = array('eligibility', 'eligibility_section');

但它可能是一个未知的长度。

另一个希望在其键中包含上面的值。例如它可能看起来像这样。

$array2 = array('eligibility' => array('eligibility_section' => 'some_val));

我需要一种方法来检查array1中的值是否作为array2中的键存在,并且它们必须以相同的顺序存在。例如。从上面的例子中,如果array1的顺序是:

array('eligibility_section', 'eligibility'); 

该方法将返回false。

对不起,如果它是一个愚蠢的问题,但我很累。

php arrays multidimensional-array
2个回答
1
投票

这可以通过简单的array reduction完成:

$array1 = array('eligibility', 'eligibility_section');
$array2 = array('eligibility' => array('eligibility_section' => 'some_val'));

$result = array_reduce($array1, function ($subject, $key) {
    return is_array($subject) && array_key_exists($key, $subject) ? $subject[$key] : false;
}, $array2);

echo $result ? 'true' : 'false';

使用PHP 7 null coalescing operator这可以缩短到这一点,但要注意你的值必须不是null才能返回正确的结果:

array_reduce($array1, function ($s, $k) { return $s[$k] ?? false; }, $array2)

4
投票

希望以下代码可以解决您的问题。

$array1 = array('eligibility', 'eligibility_section', 'some_key');
$array2 = array('eligibility' => array('eligibility_section' => array('some_key' => 'some_val' ) ) );

function is_keys_exist( $array1, $array_to_compare ) {
    $i = 0;
    foreach( $array_to_compare as $key1 => $val1 ) {
        if( $key1 !== $array1[$i] ) {
            return false;
        }
        ++$i;
        if( is_array( $val1 ) ) {
            is_keys_exist( $array1, $val1 );
        }
    }
    return true;
}

var_dump( is_keys_exist( $array1, $array2 ) );
© www.soinside.com 2019 - 2024. All rights reserved.