我有以下数组:
$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]) {
为什么会发生这种情况?
答案 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);
?>