2017-10-27 12 views
0

私は以下のような配列を持っており、特定のラベルを持つか、空の(設定されていない)エントリをフィルタリングしようとしています。しかし、これは動作していません。私はそれが多次元であるという事実をしていると思います。誰でも?多次元配列をフィルタリングする

マイ配列

Array 
(
    [0] => Array 
     (
      [id] => app_i-have 
      [type] => checkbox 
      [props] => Array 
       (
        [required] => 0 
        [label] => I have 
        [tip] => 
        [options] => Array 
         (
          [0] => Array 
           (
            [baseline] => 0 
            [value] => mobile studio 
           ) 

          [1] => Array 
           (
            [baseline] => 0 
            [value] => makeup artist 
           ) 

         ) 

       ) 

     ) 

    [1] => Array 
     (
      [id] => app_customers 
      [type] => select 
      [props] => Array 
       (
        [required] => 0 
        [label] => Customers 
        [tip] => 
        [options] => Array 
         (
          [0] => Array 
           (
            [baseline] => 0 
            [value] => Private 
           ) 

          [1] => Array 
           (
            [baseline] => 0 
            [value] => Business 
           ) 

         ) 

       ) 

     ) 

    [2] => Array 
     (
      [id] => app_exclude 
      [type] => select 
      [props] => Array 
       (
        [required] => 0 
        [label] => Exclude 
        [tip] => 
        [options] => Array 
         (
          [0] => Array 
           (
            [baseline] => 0 
            [value] => option 1 
           ) 

          [1] => Array 
           (
            [baseline] => 0 
            [value] => option 2 
           ) 

         ) 

       ) 

     ) 

    [3] => Array 
     (
      [id] => app_exclude-2 
      [type] => input_text 
      [props] => Array 
       (
        [required] => 0 
        [label] => Exclude 2 
        [tip] => 
       ) 

     ) 

) 

マイコード:

function get_listing_cfs() { 
global $wpdb; 
$serialized=$wpdb->get_var("SELECT meta_value FROM $wpdb->postmeta WHERE meta_key='va_form'"); 
$array=unserialize($serialized); 
echo '<pre>'.print_r($array, true).'</pre>'; 
$source = array_filter($array, function($el) { 
    return !(
      $el['label'] == 'Exclude' || 
      $el['label'] == 'Exclude 2' || 
      !isset($el['label']) || 
      empty($el['value']) || 
      !isset($el['value']) 
      ); 
}); 
echo '<pre>'.print_r($source, true).'</pre>'; 
} 

は、だから私は、配列内の最後の2つのエントリをフィルタリングしても空のラベルを持つすべてのエントリをフィルタリングしようとしていますか空の値。私は私のWordPressのインストールで使用したい機能の中でこれをやっています。誰が私を助けることができますか?

+0

[「小道具」] [「ラベル」]'、あなたが「'$エルを[トラバースする必要があるだろうがループ

// props '] [' options '] 'を使って' value'をチェックします。 – AbraCadaver

答えて

1

Array_filterは、古い配列をループし、trueを返す結果のみを返します。 あなたの単一の要素は次のようになります。

Array 
     (
      [id] => app_i-have 
      [type] => checkbox 
      [props] => Array 
       (
        [required] => 0 
        [label] => I have 
        [tip] => 
        [options] => Array 
         (
          [0] => Array 
           (
            [baseline] => 0 
            [value] => mobile studio 
           ) 

          [1] => Array 
           (
            [baseline] => 0 
            [value] => makeup artist 
           ) 

         ) 

       ) 

     ) 

代わりに$エル[「ラベル」]の、あなたは$エル[「小道具」] [「ラベル」]を実行する必要があることを意味しています。あなたは `$エルをチェックする必要がある最初の3つの条件のために内部オプションの配列

foreach ($el['props']['options'] as $sub){ 
    if (empty($sub['value'])) //save the return value? 
} 
+0

そして、 'value'はどうですか? – AbraCadaver