在array_shift之后无法向数组添加值

时间:2019-02-05 22:09:23

标签: php

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

$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是否会使对象脱离我的数组,如果是,我该如何防止它发生?

关于安德里亚斯

1 个答案:

答案 0 :(得分:4)

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

$cls->SetBox($page, $region);
echo $cls->title;

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

$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); 会将它们解释为数字,并从0开始对数组重新编号。为避免这种情况,请在数组的第一个键上使用array_shift(使用{{ 3}}):

unset

还请注意,您应该使用krsort($tokenarray, SORT_NUMERIC); unset($tokenarray[key($tokenarray)]); $tokenarray += [$datetime => $newtoken]; $tokenarrayjson = json_encode($tokenarray); 而不是1,以防将来的PHP版本中值更改。

key