-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[$i][1] 位置包含其种类的最后一个值(分别为最后 2、3 和 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 创建一个新数组消除了使用 unset() 创建的间隙。

4

2 回答 2

0

遍历$myArray,保存每种类型的最后位置$otherArray,循环遍历取消设置的$otherArray项目$myArray。就这样。

于 2013-04-05T20:32:59.073 回答
0
$i = count($myArray);
$used = array();
while ($i-- > 0)
    if (!isset($used[$myArray[$i][1]])) {
        $used[$myArray[$i][1]] = true;
        unset($myArray[$i]);
    }

这个简单的代码片段首先从后面遍历数组,如果尚未删除具有此编号的条目,则删除索引。

于 2013-04-05T20:33:31.130 回答