我使用以下代码将值添加到关联数组:
$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是否会使对象脱离我的数组,如果是,我该如何防止它发生?
关于安德里亚斯
答案 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版本中值更改。