出现未知的数组元素?

时间:2013-02-03 17:33:41

标签: php arrays

我正在写一个代码,突然间我发现,出现了一些奇怪的值。

    function purify($output){
    $temp = 0;
    $max_index = count($output);
    for($i=0;$i < $max_index; $i++){
        if(strlen($output[$i]) == 3){
                $str = str_split($output[$i]);
                arsort($str);
                $str = implode($str);
                $output[$temp] = $str;
                $temp++;
        }
        else unset($output[$i]);
    }
    return array_unique($output);
}

当我传递由这些元素组成的数组时:

11 115 165 138 999 885 999 456 135 726 642 425 426

我得到了这个输出:

array(11) { [1]=> string(3) "651" [2]=> string(3) "831" [3]=> string(3) "999" [4]=> string(3) "885" [6]=> string(3) "654" [7]=> string(3) "531" [8]=> string(3) "762" [9]=> string(3) "642" [10]=> string(3) "542" [12]=> string(3) "426" [0]=> string(3) "511" }

$temp仅达到11时,第12个元素([12] =&gt; string(3)“426”)是如何到达那里的?我无法理解它。

2 个答案:

答案 0 :(得分:4)

在迭代数组时更改数组$output并不是一个好习惯。

考虑创建一个名为$result的新数组并更改此行:

 $output[$temp] = $str;

为:

 $result[$temp] = $str;

这样,在循环结束之前,您不会触摸$output

在我看来,您看到了奇怪的索引,因为$output的更改会影响下一次迭代。

答案 1 :(得分:1)

由于您要覆盖参数 output 数组,因此数组中最初的元素保持不变(除非它们的长度为!= 3)。

也许你可以试试

function purify($output){
    $result = array();
    $max_index = count($output);
    for($i=0;$i < $max_index; $i++){
        if(strlen($output[$i]) == 3){
                $str = str_split($output[$i]);
                arsort($str);
                $result[] = implode($str);
        }
    }
    return array_unique($result);
}

顺便说一句,你真的想使用arsort而不是rsort吗? rsort因为使用索引数组(而不是关联数组)而有意义。

                rsort($str);