2016-10-19 11 views
0

に選択的に連想配列から空の要素を削除する:上記Iは、以下の連想配列有しPHP

  $arrData = array_map('array_filter', $arrData); 
      $arrData = array_filter($arrData); 

:空の配列要素を除外する

Array 
(
    [0] => Array 
     (
      [0] => 18-Jul-16 
      [1] => 29-Jul-15 
      [2] => 2-Feb-16 
      [3] => 3301 
      [4] => 1800 Bimodel 
      [5] => 5813 
      [6] => 1 800 Bimodel Multi-Option Test 
      [7] => Tested 
      [8] => Shop Center 
      [9] => Shop Services 
      [10] => 864 
      [11] => 20 
      [12] => 884 
      [13] => 0.75 
      [14] => 0.2 
      [15] => 0.49 
      [16] => 429.6 
      [17] => 47.3 
      [18] => 382.3 
      [19] => 
      [20] => Jonas John 
     ) 

    [1] => Array 
     (
      [0] => 
      [1] => 
      [2] => 
      [3] => 
      [4] => 
      [5] => 
      [6] => 
      [7] => 
      [8] => 
      [9] => 
      [10] => 
      [11] => 
      [12] => 
      [13] => 
      [14] => 
      [15] => 
      [16] => 
      [17] => 
      [18] => 
      [19] => 
      [20] => 
     ) 
) 

を、私は、次のコードを使用していコードは配列から空の要素をすべて削除します。また、0番目の配列のインデックス19の値も削除されます。配列のすべての値が空の場合にのみ、配列要素を削除します。私の場合、インデックス1の配列のみを削除し、0番目のインデックスの配列は削除しないでください(またはその要素のいずれか)。私は常に各配列から21の要素が必要です。私はPHPコードを使用してそれを選択的に行うことはできますか?

おかげ

答えて

1
foreach($dataArray as $outerKey =>$innerArray) { 
$counter=0;   
foreach($innerArray as $key=>$value){ 
     if(trim($value)==""){ 
     $counter++; 
     } 
      if($counter==count($innerArray) 
       unset($dataArray[$outerKey]); 
    } 
} 
+0

あなたは$ dataArray要素の設定を解除加えるべきかもしれませ? – krasipenkov

+1

他のロジックを直接書くことができます。@krasipenkovが更新しました。直接キーにアクセスしてから設定を解除しました –

+0

ええ、欲しいのは、外側の配列要素がすべて内部要素が空の場合のみ削除することです。右 – krasipenkov

0
// PHP < 5.3 
print_r(array_filter($linksArray, create_function('$value', 'return $value !== "";'))); 

// PHP 5.3 and later 
print_r(array_filter($linksArray, function($value) { return $value !== ''; })); 
0

単に魔法:

<?php 
/** 
$data contains (incoming) unfiltered value 
*/ 
$data = [ 
    'keep1' => [ 
     0,1,2,3 
    ] 
    , 
    'drop1'=>[ 
     '',0,false,[] 
    ] 
    ,'keep2'=>[ 
     2,2,3,4 
    ] 
]; 

foreach ($data as $key => $innerArray) { //check for each element 
    foreach ($innerArray as $innerValue) { 
     if (!empty($innerValue)) { 
      continue 2;//stop investigating at first non empty, we shoud keep this 
     } 
    } 
    //all values in innerArray are empty, drop this 
    unset($data[$key]); 

} 

print_r(array_keys($data)); 

出力:$ innerArrayが空のままにするとき

Array 
(
    [0] => keep1 
    [1] => keep2 
) 
+1

このコードスニペットでは、[説明を含む](http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers )本当にあなたの投稿の質を向上させるのに役立ちます。将来読者の質問に答えていることを覚えておいてください。そうした人々はあなたのコード提案の理由を知らないかもしれません。 – andreas

+0

@Andreasがコメントで更新されました – cske