我有一个问题,我正在努力解决。
我有两个数组。
$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)