array_diff和重新编号数字键

6
(I'm a beginner)

我的脚本使用标准的

$c = 0;
$t = count($array);

while ($c < $t) {
  $blah = $array[$c];
  ++$c;
}

我曾经在IT技术领域涉猎颇深。但最近遇到一个问题,需要使用array_diff函数,但由于数组中的数值键存在间隙,导致程序出现了严重错误,提示Undefined offset

请问如何重置数组中的数值键?无需考虑对象在数组中的顺序。

3个回答

28

要重置键,您可以使用array_values()函数:

$array = array_values($array);

8

您不需要重置数组的键:您需要改变遍历数组的方式。

不要使用while循环并通过索引访问数组元素,而应该使用foreach循环,它只会获取数组中的元素:

foreach ($array as $key => $value) {
    // $key contains the index of the current element
    // $value contains the value of the current element
}

+1 给你,因为我肯定会在其他地方使用那些知识。但是这个奖励必须给 Tatu,因为他命中了靶心。谢谢 Pascal。 - Drew
@Andrew:不用谢 :-) ;;是啊,我知道我并没有真正回答问题,但我认为这仍然会有用*(而且我总是使用foreach循环数组元素)* ;; 我看到其他答案已经谈到了array_values,所以我没有在我的答案中提及。 - Pascal MARTIN
我感谢你抽出时间来回答问题,真的非常感谢。我还在初学阶段,显然处于“我有一个超级棒的锤子”的阶段,正在学习编程。所以再次感谢你为更合适的代码设计提供广泛和有帮助的推动。 - Drew

2

谢谢 Tatu。

为了好玩,我将与您分享我在等待明智答案时使用的愚蠢黑客:

$badArray = array_diff($allData, $myData);

$string = implode(",",$badArray);

$dump = explode(",",$string);

$goodArray = $dump;

它起作用了。让我感觉很肮脏,但它起作用了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接