2013-04-05 58 views
-2

我的大脑坏了。这里的概念:从数组中删除子项,其中子项是该项的最后一项

$a = array('please', 2); 
$s = array('help', 3); 
$d = array('me', 1); 
$f = array('!', 3); 
$g = array('asdf', 1); 

$myArray = array($a, $s, $d, $f, $g); 

for ($i = 0; $i < count($myArray); $i++) { 
    // code here 
} 

代码应该从myArray的包含逻辑,其去除索引0,3和4,因为它们含有其种在位置$ myArray的最后的值(最后2,3和1分别) $ I] [1]。

- 编辑:从意见 改编建议,得到这样的:

$a = array('please', 2); 
$s = array('help', 3); 
$d = array('me', 1); 
$f = array('!', 3); 
$g = array('asdf', 1); 

$myArray = array($a, $s, $d, $f, $g); 

$used = array(); 

for ($i = 0; $i < count($myArray); $i++) { 
    $used[$myArray[$i][1]] = $i; 
} 

foreach ($used as $deleteMe) 
    unset($myArray[$deleteMe]); 

$newArray = array_values($myArray); 

var_dump($newArray); 

它的工作原理,并建立与array_values一个新的数组消除()使用未设置产生的间隙。

回答

0
$i = count($myArray); 
$used = array(); 
while ($i-- > 0) 
    if (!isset($used[$myArray[$i][1]])) { 
     $used[$myArray[$i][1]] = true; 
     unset($myArray[$i]); 
    } 

这个简单的片断第一迭代并删除索引如果与此数目的条目尚未被删除。

+0

这不会删除每种类型的第一个吗?由于您从最后开始并开始使用,每次使用[bla]中写入的最后一个索引是第一个。 – STEELHE4RT 2013-04-05 20:59:43

+0

无论哪种方式,谢谢。我能够将您的代码调整为可行的解决方案。 – STEELHE4RT 2013-04-05 21:14:00

+0

没问题,...我也修正了这里的代码;) – bwoebi 2013-04-05 21:16:51

0

通过$myArray进行迭代,在$otherArray中保存各种最后一个位置,循环通过$otherArray$myArray取消删除项目。就这样。从后面的阵列上