【问题标题】:Remove multiple elements from array and reindex从数组中删除多个元素并重新索引
【发布时间】:2015-04-09 15:23:30
【问题描述】:

我可以删除前三个元素以及value 不等于 2 的所有其余元素吗?语言是php。

print_r($array)

输出

Array ( 
    [0] => Array ( [name] => aa [value] => 0 )        
    [1] => Array ( [name] => db [value] => 1 ) 
    [2] => Array ( [name] => bc [value] => 2 )
    [3] => Array ( [name] => ba [value] => 3 ) 
    [4] => Array ( [name] => ba [value] => 0 ) 
    [5] => Array ( [name] => bc [value] => 1 )    
    [6] => Array ( [name] => aa [value] => 2 ) 
    [7] => Array ( [name] => cb [value] => 3 )
    [8] => Array ( [name] => ca [value] => 0 ) 
    [9] => Array ( [name] => dc [value] => 1 ) 
    [10] => Array ( [name] => db [value] => 2 )
    [11] => Array ( [name] => aa [value] => 3 )
    [12] => Array ( [name] => dd [value] => 0 )
    [13] => Array ( [name] => db [value] => 1 )
    [14] => Array ( [name] => bb [value] => 2 )
    [15] => Array ( [name] => ac [value] => 3 )
) 

我还需要重新索引,使其从 0 开始

Array ( 
    [0] => Array ( [name] => aa [value] => 2 ) 
    [1] => Array ( [name] => db [value] => 2 )
    [2] => Array ( [name] => bb [value] => 2 )
) 

【问题讨论】:

  • 这取决于语言。
  • @ScottHunter。谢谢,我解决了这个问题。
  • 是的,但是您必须编写一些代码才能做到这一点。尝试一些方法并告诉我们它是如何进行的,如果它不起作用,那么我们可以提供帮助。
  • 总是前三个元素吗?或者只是删除那些没有2 值的?
  • @JasonMcCreary 是的,前三个元素无论如何都应该被销毁,从第四个元素开始,只有值为 2 的元素应该被保留。

标签: php arrays indexing array-unset


【解决方案1】:

你可以这样做:

$new_array = array();

foreach ($array as $k => $v) {
    if ($k > 2 && $v['value'] == 2) {
        $new_array[] = $v;
    }
}

print_r($new_array);

【讨论】:

  • 这将复制 $v['value'] 等于 2 的项目。如果您想删除这些项目(据我所知),它是!=
  • 反之,我想删除不等于2的值。我不够清楚。你帮助我很好地理解了这一点。如果value 更深地埋在parent 数组中,if ($k > 2 and $v['parent'] ['value'] == 2) 也可以。