首页 > 解决方案 > 在 array_shift 之后无法向数组添加值

问题描述

我使用以下代码将值添加到关联数组:

$tokenarray += [$datetime => $newtoken];

这工作正常。但是在我对数组进行排序并使用该代码对其进行移动之后:

$sortedarray = krsort($tokenarray, 1);
$shiftedarray = array_shift($sortedarray);
$shiftedarray += [$datetime => $newtoken];
$tokenarrayjson = json_encode($shiftedarray);

出现此错误:

Fatal error: Uncaught Error: Unsupported operand types in SITE Stack trace: #0 {main} thrown in SITE on line

$shiftedarray += [$datetime => $newtoken]; <- This line throes the error

有人可以告诉我为什么吗?array_shift 是否从我的数组中创建一个对象,如果是,我该如何防止它?

问候, 安德烈亚斯

标签: php

解决方案


krsort不返回排序后的数组,它就地对其参数进行排序并根据它是否成功返回真/假。这同样适用于array_shift,它返回从数组移出的值,而不是移位后的数组:您需要这样做:

$sortedarray = $tokenarray;
krsort($sortedarray, SORT_NUMERIC);
$shiftedarray = $sortedarray;
array_shift($shiftedarray);
$shiftedarray += [$datetime => $newtoken];
$tokenarrayjson = json_encode($shiftedarray);

如果您实际上不需要中间数组,则可以将其简化为:

krsort($tokenarray, SORT_NUMERIC);
array_shift($tokenarray);
$tokenarray += [$datetime => $newtoken];
$tokenarrayjson = json_encode($tokenarray);

笔记

由于您的键是数字字符串,array_shift因此会将它们解释为数字并从 0 开始重新编号您的数组。为避免这种情况,请使用unset数组的第一个键(使用 找到key)代替:

krsort($tokenarray, SORT_NUMERIC);
unset($tokenarray[key($tokenarray)]);
$tokenarray += [$datetime => $newtoken];
$tokenarrayjson = json_encode($tokenarray);

另请注意,您应该使用SORT_NUMERIC而不是 1,以防万一未来版本的 PHP 中值发生变化。

3v4l.org 上的演示


推荐阅读