2017-06-23 9 views
-1

これは連想配列である:php - 連想配列の配列で複数のキー/値のペアを検索し、一致するアイテムを返す方法

Array 
    (
    [tableData] => Array 
     (
      [0] => Array 
      (
       [booking_name] => abc/xyz/123 
       [pdg] => assure      
       [user_area] => es st 
       [release] => oss72 
       [start_date] => 2017-06-20 00:00:00 
       [end_date] => 2017-06-23 00:00:00 
       [asset_info] => Array 
        (
         [0] => Array 
          (
           [status] => 10 
           [manufacturer] => HP 
           [model] => HP BL460C GEN8 
           [hardware_color] => #0066b3 
          ) 

        ) 

       [full_name] => Valay Desai 
       [email_address] => [email protected] 
      ) 
      [1] => Array 
      (
       [booking_name] => abc/xyz/123 
       [pdg] => assure 
       [user_area] => ls reca 
       [release] => oss72 
       [start_date] => 2017-06-20 00:00:00 
       [end_date] => 2017-06-23 00:00:00 
       [asset_info] => Array 
        (
         [0] => Array 
          (
           [status] => 10 
           [manufacturer] => SUN 
           [model] => SUN GEN8 
           [hardware_color] => #0066b3 
          ) 

        ) 

       [full_name] => Chako Desai 
       [email_address] => [email protected] 
      ) 
      ...... 
      [500] => Array() 
     ) 
) 

私はarray_filterを使用してデータをフィルタリングして値を比較するための通常の方法を知っています。 tableDataに次のキーと値のペアを検索したいと思います。それは= booking_nameを有するよう

Array 
(
[booking_name] => abc   
[pdg] => Array 
     (
      [0] => Array 
       (
        [name] => Invalid 
        [value] => Invalid 

       ) 

      [1] => Array 
       (
        [name] => assure 
        [value] => assure 

       ) 

     ) 

    [user_area] => Array 
     (
      [0] => Array 
       (
        [name] => es st 
        [value] => es st 

       ) 

      [1] => Array 
       (
        [name] => Invalid 
        [value] => Invalid 

       ) 

      [2] => Array 
       (
        [name] => a&o 
        [value] => a&o 

       ) 

     ) 

) 

理想的な出力がtableDataから最初の要素でなければならないABC、PDG =私が試み

user_area = ES ST及び保証:

// bigarray is an originial array to be filtered 
// filterObj is an array with multiple filter conditions 
    array_filter($bigarray, function ($val_array) use ($filterObj) { 
      $intersection = array_intersect_assoc($val_array, $filterObj); 
      return (count($intersection)) === count($filterObj); 
     }); 

これ常に戻りますブランクアレイ。

FYI-私はPHPを初めて利用しています。

アップデート1:

私はvisible:trueを持っているオブジェクトを取得するための方法の下に使用しました。質問された質問についても同様に試しましたが、理想的な結果を得ることができませんでした。

$columnVisible = array(
     'visible' => 1, 
    ); 

    $visibleColumns = array_filter($passedColumns, function ($val_array) use ($columnVisible) { 
     $intersection = array_intersect_assoc($val_array, $columnVisible); 
     return (count($intersection)) === count($columnVisible); 
    }); 

どのように私は、配列の連想配列の配列の配列として渡された複数のフィルタリング条件を適用していますか?

+0

質問にはあまり明確ではありません.. –

+0

@BEJGAMSHIVAPRASAD質問と詳細を更新しました。今はっきりしていることを願っています。 – Valay

答えて

1

このソリューションをお試しください。

$filters = array('pdg'=>array('xyzabc'), 'user_area'=>array('ls reca')); 
$filter_items = array(); 
foreach($items['tableData'] as $item){ 
    $i=0; 
    $is_match = true; 


foreach($filters as $key=>$value){ 
    //$is_match = true; 
    if(!in_array($item[$key], $value)){ 
     $is_match = false; 
     break; 
    } 
    //$is_match = true; 
} 

if($is_match){ 
    $filter_items[] = $item; 
} 
} 
+0

これは配列の提供されたフィルターでは機能しません。しかし、これはフィルタ($ filters)に対して与えた書式でうまく動作します。 – Valay

+0

質問と詳細が更新されました。 – Valay

関連する問題