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


How to build the keys of a multidimensional array in PHP from the values of another array?

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

我有两个数组。

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

但也可能是未知长度

另一个则希望在其键中包含上述值。它可能是这样的。

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

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

array('eligibility_section', 'eligibility'); 

该方法将返回false。

很抱歉,如果这是一个愚蠢的问题,但我真的很累。

希望下面的代码能解决你的问题。

$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 ) );

这可以通过一个简单的数组缩减来完成:

$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';

对于php7的null合并运算符,可以将其缩短为:

,但要注意,您的值不能为null,以便返回正确的结果:
array_reduce($array1, function ($s, $k) { return $s[$k] ?? false; }, $array2)