2016-10-12 5 views
2

私は解決に苦しんでいるという問題があります。別の配列の値からPHPで多次元配列のキーを構築するには?

私は2つの配列を持っています。

一つは

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

である。しかし、それは未知の長さである可能性があります。

もう1つはうまくいけば上の値がそのキーに含まれています。たとえば、このように見えるかもしれません。

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

私は、配列1の値が配列2のキーとして存在し、それらが同じ順序で存在しなければならないかどうかを確認する方法が必要です。例えば。上記の例の場合、array1の次数は:

array('eligibility_section', 'eligibility'); 

このメソッドはfalseを返します。

申し訳ありませんが、その愚かな質問が、私は非常に疲れています。

答えて

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)); 
関連する問題