2017-02-28 25 views
2

適切な値を持つdisciplinesのキー配列を見つけるにはどうすればよいですか?例については
は:アレイの配列入力キーを検索

$arr1 = [2, 4, 12]; 
$result = [...] // Var_dump in link 
in_array($arr1, $result); 

かかわらず、彼らのための、私はキーのセット、またはまったくがあるかどうかを確認する必要があります。 ただし、in_array()は機能しません。 ありがとう!

Dump array


アップデート(2017年3月1日)

は、これは私がする多彩なワンライナーを持って

$findResult = array_filter($result, function($val)use($get){ 
      $requiredDisciplines = [1, $get['disciplines']['second'], $get['disciplines']['third'], $get['disciplines']['four']]; // запрос 
      $activePriorities = []; 

      foreach ($val['disciplines'] as $discipline) { 
       if (in_array($discipline['id'], $requiredDisciplines)) { 
        $activePriorities[] = $discipline['priority']; 
       } 
      } 

      for ($i = 0; $i<3; $i++){ 
       if(!in_array($i, $activePriorities)) 
        return false; 
      } 

      /*if(in_array(0, $activePriorities) && in_array(1, $activePriorities) && in_array(2, $activePriorities) != true) 
       return false;*/ 

      // print_r($activePriorities); 

      return true; 
     }); 
+0

の質問は不明です...分野はどこに定義されていますか? – Naincy

+1

in_array()PHPの多次元配列ではありません.... –

+0

@Naincy、配列に一連の分野がある場合は、答えを真または偽にする必要があります。 例:$ disciplines [2、4、12]; – ladone

答えて

3

この問題を解決するための私のバージョンでありますマッチを含むすべての配列を与えます。 (したがって、あなたはそれからキーまたはカウントを得ることができます)。 (demo

この関数は、針と干し草の山の間のを比較するのみ設定されているが、array_intersect_assocarray_intersectを置き換えるとの末尾に,ARRAY_FILTER_USE_BOTHを追加することによって、検索キー値ペアに設定することができますフィルタ関数(参照:https://stackoverflow.com/a/42477435/2943403 @ 2スニペット)

<?php 
// haystack array 
$result[]=array(1,2,3,4,5,6,7,8,9,10,11,12); 
$result[]=array(1,3,5,7,9,11); 
$result[]=array(2,4,6,8,10,12); 

// needle array 
$arr1=array(2,4,12); 

//one-liner: 
$qualifying_array=array_filter($result,function($val)use($arr1){if(count(array_intersect($val,$arr1))==count($arr1)){return $val;}}); 

/* 
// multi-liner of same function: 
$qualifying_array=array_filter(
    $result, 
    function($val)use($arr1){ // pass in array to search 
     if(count(array_intersect($val,$arr1))==count($arr1)){ // total pairs found = total pairs sought 
      return $val; 
     } 
    } 
);*/ 


echo 'Total sub-arrays which contain the search array($arr1): ',sizeof($qualifying_array),"<br>"; 
echo 'Keys of sub-arrays which contain the search array($arr1): ',implode(',',array_keys($qualifying_array)),"<br>"; 
echo 'Is search array($arr1) in the $result array?: ',(sizeof($qualifying_array)?"True":"False"),"<br>"; 
echo "<pre>"; 
print_r($qualifying_array); 
echo "</pre>"; 

出力:

Total sub-arrays which contain the search array($arr1): 2 
Keys of sub-arrays which contain the search array($arr1): 0,2 
Is search array($arr1) in the $result array?: True 
Array 
(
    [0] => Array 
     (
      [0] => 1 
      [1] => 2 
      [2] => 3 
      [3] => 4 
      [4] => 5 
      [5] => 6 
      [6] => 7 
      [7] => 8 
      [8] => 9 
      [9] => 10 
      [10] => 11 
      [11] => 12 
     ) 

    [2] => Array 
     (
      [0] => 2 
      [1] => 4 
      [2] => 6 
      [3] => 8 
      [4] => 10 
      [5] => 12 
     ) 

) 
+0

それは私の問題の解決策のようです。しかし、私は自分の質問に対する答えを見つけました!答えてくれてありがとう! – ladone

関連する問題