2012-03-22 47 views
1

我有一個陣列$mainArray陣列,我想刪除/ undset陣列,沒有價值的密鑰。如何在php中取消設置空數組?

這裏是我的數組:

Array 
(
[0] => Array 
    (
     [msg_id] => 203 
     [comment] => Array 
      (
       [0] => Array 
        (
         [com_id] => 
        ) 
      ) 
    ) 
[1] => Array 
    (
     [msg_id] => 202 
     [comment] => Array 
      (
       [0] => Array 
        (
         [com_id] => 196 
        ) 
       [1] => Array 
        (
         [com_id] => 197 
        ) 
       [2] => Array 
        (
         [com_id] => 
        ) 
      ) 
    ) 
[2] => Array 
    (
     [msg_id] => 201 
     [comment] => Array 
      (
       [0] => Array 
        (
         [com_id] => 198 
        ) 
       [1] => Array 
        (
         [com_id] => 
        ) 
      ) 
    ) 
) 

在這種情況下,我想看看裏面comment陣列陣列,看看是否有任何人有空值。如果所有的子陣列都是空的,最好的情況是完全刪除comment陣列。

與離開螺母的IM comment嘿只是空

此陣應成爲:

Array 
(
    [0] => Array 
     (
      [msg_id] => 203 
     ) 
    [1] => Array 
     (
      [msg_id] => 202 
      [comment] => Array 
       (
        [0] => Array 
         (
          [com_id] => 196 
         ) 
        [1] => Array 
         (
          [com_id] => 197 
         ) 
       ) 
     ) 
    [2] => Array 
     (
      [msg_id] => 201 
     ) 
) 

對如何進行任何想法?

謝謝。

回答

1
$array = array_map(function ($i) { 
    $i['comment'] = array_filter($i['comment'], function ($c) { return $c['com_id']; }); 
    return array_filter($i); 
}, $array); 

需要PHP 5.3或更高。

2

使用php的unset()取消設置任何數組鍵/值。

此鏈接http://in3.php.net/unset

在你的情況下,代碼就可以了,(我沒有測試它。但讓我知道如果你有任何問題,我可以修復它)

function unsetCommentFromArray($mainArray) { 
    foreach($mainArray as $key => $value) { 
     foreach($value['comment'] as $k => $v) { 
      if(empty($v['com_id'])) { 
       unset($mainArray[$key]['comment'][$k]); 
      } 
     } 
    } 
    return $mainArray; 
} 
+1

+1首先使用特定的解決方案。 – 2012-03-22 05:14:00

2
的更多信息

array_filter()是你所追求的。特別是遞歸版本。以下內容取自a comment on the PHP Doc:。

function array_filter_recursive($array, $callback = null) { 
    foreach ($array as $key => & $value) { 
     if (is_array($value)) { 
      $value = array_filter_recursive($value, $callback); 
     } 
     else { 
      if (! is_null($callback)) { 
       if (! $callback($value)) { 
        unset($array[$key]); 
       } 
      } 
      else { 
       if (! (bool) $value) { 
        unset($array[$key]); 
       } 
      } 
     } 
    } 
    unset($value); 

    return $array; 
}