2014-07-21 173 views
1

我有这个多维数组,我想要完全删除[earnings]索引为空。按特定键删除多维数组

Array 
(
    [0] => Array 
    (
     [earnings] => 
     [other] => Array() 
     [ord] => 2 
     [days] => 1 
     [total] => 1 
    ) 

    [1] => Array 
    (
     [earnings] => The campaign was effectively ended in November 1917. 
     [other] => Array 
     (
      [campaign] => 1 
      [novemb] => 1 
      [today] => 1 
     ) 
     [ord] => 1 
     [days] => 8 
     [total] => 1 
    ) 
) 

我想输出是这样的:

[1] => Array 
(
    [earnings] => The campaign was effectively ended in November 1917. 
    [other] => Array 
    (
     [campaign] => 1 
     [novemb] => 1 
     [today] => 1 
    ) 
    [ord] => 1 
    [days] => 8 
    [total] => 1 
) 

我试过,但不是不工作得非常好:

foreach($array as $key=>$test){ 

foreach($test as $koval=>$user) { 

     if(empty($user['earnings']) || !file_exists($staff['earnings'])) { 
      unset($array[$key][$koval]); }}} 

回答

1

你循环1太多次。你想要的是这样的:

foreach($array as $i => $item) { 
    if(empty($item['earnings'])) { 
     unset($array[$i]); 
    } 
} 

Example


你应该看看FuzzyTree的回答下面这样做的更清洁的方式。

2
$array = array_filter($array,function($item) { 
    return (!empty($item['earnings'])); 
}); 
0

你所寻找的是array_filterhttp://php.net/manual/en/function.array-filter.php

$arr = array(
    array(
     'earnings' => null, 
     'other' => array(), 
     'ord'  => 2, 
     'days'  => 1, 
     'total' => 1, 
    ), 
    array(
     'earnings' => 'The campaign was effectively ended in November 1917.', 
     'other' => array(
      'campaign' => 1, 
      'novemb' => 1, 
      'today' => 1, 
     ), 
     'ord'  => 1, 
     'days'  => 8, 
     'total' => 1, 
    ), 
); 

var_dump($arr); 
//array(2) { 
// [0] => 
// array(5) { 
//  'earnings' => 
//  NULL 
//  'other' => 
//  array(0) { 
//  } 
//  'ord' => 
//  int(2) 
//  'days' => 
//  int(1) 
//  'total' => 
//  int(1) 
// } 
// [1] => 
// array(5) { 
//  'earnings' => 
//  string(52) "The campaign was effectively ended in November 1917." 
//  'other' => 
//  array(3) { 
//   'campaign' => 
//   int(1) 
//   'novemb' => 
//   int(1) 
//   'today' => 
//   int(1) 
//  } 
//  'ord' => 
//  int(1) 
//  'days' => 
//  int(8) 
//  'total' => 
//  int(1) 
// } 
//} 
$filtered = array_filter($arr, function ($val) { 
    return isset($val['earnings']) && !empty($val['earnings']); 
}); 
var_dump($filtered); 
//array(1) { 
// [1] => 
// array(5) { 
//  'earnings' => 
//  string(52) "The campaign was effectively ended in November 1917." 
//  'other' => 
//  array(3) { 
//   'campaign' => 
//   int(1) 
//   'novemb' => 
//   int(1) 
//   'today' => 
//   int(1) 
//  } 
//  'ord' => 
//  int(1) 
//  'days' => 
//  int(8) 
//  'total' => 
//  int(1) 
// } 
//}