Как построить ключи многомерного массива в PHP из значений другого массива?

#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)