从数组中删除子数组,其中子项是该项的最后一项

时间:2013-04-05 20:26:16

标签: php arrays loops

我的大脑坏了。这是概念:

$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 [$ i] [1]位置的各种类型的最后一个值(分别为最后2,3和1)。 / p>

- 编辑: 根据评论改编建议:

$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创建一个新数组可以消除使用unset()创建的间隙。

2 个答案:

答案 0 :(得分:0)

遍历$myArray,保存$otherArray中各种姓名的最后一个位置,循环显示$otherArray$myArray未提交的项目。就是这样。

答案 1 :(得分:0)

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

这个简单的代码段首先从数组的后面进行迭代,如果尚未删除带有此数字的条目,则删除索引。