2016-10-19 7 views
0

У меня есть следующий ассоциативный массив:Удалить пустые элементы из ассоциативного массива выборочно в PHP

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] => 
     ) 
) 

Чтобы отфильтровать пустые элементы массива, я использую следующий код:

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

выше код удаляет все пустые элементы из массива. Он также удаляет значение в индексе 19 в 0-м массиве. Я хочу, чтобы он удалял элементы массива только в том случае, если все значения массива пусты. В моем случае только массив в индексе 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 элемента при $ innerArray остается пустым ? – 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)); 

Выход:

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

Хотя этот фрагмент кода может решить вопрос, [включая пояснения] (http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос читателей в будущем, и эти люди могут не знать причин вашего предложения кода. – andreas

+0

@ Andreas обновлен с комментариями – cske

Смежные вопросы