#php #arrays #multidimensional-array
#php #массивы #многомерный-массив
Вопрос:
У меня проблема, которую я изо всех сил пытаюсь решить.
У меня есть два массива.
Один из них
$array1 = array('eligibility', 'eligibility_section');
Но это может быть неизвестная длина.
Надеемся, что другой массив будет содержать указанные выше значения в своих ключах. Например, это может выглядеть так.
$array2 = array('eligibility' => array('eligibility_section' => 'some_val));
Мне нужен способ проверить, существуют ли значения в array1 как ключи в array2, и они должны существовать в том же порядке. Например. из примера выше, если порядок array1 был:
array('eligibility_section', 'eligibility');
Метод вернет false .
Извините, если это глупый вопрос, но я очень устал.
Ответ №1:
Надеюсь, следующий код решит вашу проблему.
$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 ) );
Ответ №2:
Это можно сделать с помощью простого сокращения массива:
$array1 = array('eligibility', 'eligibility_section');
$array2 = array('eligibility' => array('eligibility_section' => 'some_val'));
$result = array_reduce($array1, function ($subject, $key) {
return is_array($subject) amp;amp; array_key_exists($key, $subject) ? $subject[$key] : false;
}, $array2);
echo $result ? 'true' : 'false';
С помощью оператора объединения PHP 7 null это можно сократить до this , хотя имейте в виду, что ваши значения не должны быть null
для этого, чтобы вернуть правильный результат:
array_reduce($array1, function ($s, $k) { return $s[$k] ?? false; }, $array2)