在不使用array_unique

时间:2017-11-24 16:23:44

标签: php arrays for-loop

我有以下数组:

$array = [1, 1, 2, 3, 4, 4, 4, 5, 6, 7, 8, 8, 9, 10 ];

我试图获取所有独特元素并将它们推送到此数组:

$newArray = [];

我试图通过for循环遍历元素并检查当前元素是否等于下一个元素。以下是:

for ($i = 0; $i < count($array); $i++) {
    if ($array[$i] == $array[$i + 1]) {
        continue;
    }
    $array[$i] = $newArray;
}

如果当前元素等于下一个元素,则继续下一次迭代。如果不相等,请将其推送到$newArray阵列。 我得到以下例外:

  

注意:未定义的偏移量:14   在这一行:

if ($array[$i] == $array[$i + 1]) {

为什么会发生这种情况?

5 个答案:

答案 0 :(得分:0)

你可以尝试一下:

<?php
$array = [1, 1, 2, 3, 4, 4, 4, 5, 6, 7, 8, 8, 9, 10];
$newArray = [];
for ($i = 0; $i < count($array); $i++) {
    if(!empty($array[$i + 1])){
        if ($array[$i] == $array[$i + 1]) {
            continue;
        }
        $newArray[] = $array[$i];
    }
}
print_r($newArray);
?>

希望对你有所帮助。

答案 1 :(得分:0)

试试吧

   <pre>
<?php
$array = [1, 1, 2, 3, 4, 4, 4, 5, 6, 7, 8, 8, 9, 10 ];
$arr=array();
$arr2=array();
print_r($array);
$backwards = array_reverse($array);
$last_item = NULL;
foreach ($array as $key => $value) {
    if($last_item === $value){
        array_push($arr, $value) ;
        echo $key."=>". $value."<br>";
    }else{
       array_push($arr2, $value) ; 
    }
   //  array_push($array, $value) ;
     $last_item = $value;
}
echo "Duplicate values<br>";
print_r($arr);
echo "Array without duplicate values <br>";
print_r($arr2);
?>
</pre>

答案 2 :(得分:0)

发生此错误是因为数组$array包含14个元素,(最大偏移量为13)。在for循环中,$i的最大值为13(count($array) - 1),但在最后一次迭代中,您尝试比较$array[$i](= $array[13] )到$array[$i + 1](= $array[14]),并且未定义偏移量14。

最简单方式:

<?php

$array = [1, 1, 2, 2, 3, 4, 4, 4, 5, 6, 7, 8, 9, 10];
$newArray = [];

foreach($array as $value){
    if (!in_array($value, $newArray))
        $newArray[] = $value;
}

这个版本仍然可以获得数组的唯一值,即使一个字符被使用了两次且不跟随(例如:[1, 1, 2, 2, 3, 4, 4, 4, 5, 2, 6, 7, 8, 9, 10])。

答案 3 :(得分:0)

您的数组有14个元素,因此偏移量从0变为13。 PHP只是注意到您尝试访问的偏移量不存在。

答案 4 :(得分:-1)

你在PHP中有set。只需使用它 - 您可以contains检查项目是否在那里。但在大多数语言中,您可以将数组作为输入传递,并且您将获得唯一的条目。

修改

对某人来说,这太复杂了。请尝试以下代码:

<?php
$array = [1, 1, 2, 3, 4, 4, 4, 5, 6, 7, 8, 8, 9, 10 ];
$set = new \Ds\Set();
for ($i = 0; $i < count($array); $i++) {
    $set->add($array[$i])
}
$newArray = $set->toArray()
var_dump($newArray);
?>