php - 在 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 是否从我的数组中创建一个对象,如果是,我该如何防止它?
问候, 安德烈亚斯
解决方案
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 中值发生变化。
推荐阅读
- java - 为什么在使用 Apache Felix Gogo 启动我的最小示例包时会出现 BundleException?
- mysql - 将表 A 中的列中的值插入表 B
- php - 我如何告诉用户数据库中是否没有用户输入的特定日期的数据
- python - 选择特定数据进行汇总和绘图
- sql - SAS - 在 proc SQL 中使用 proc 导入的 CSV(错误)
- sql - 包括本季度在内的最近 6 个季度的数据
- getstream-io - Getstream.io 的 own_reactions 是如何工作的?认为它会包含用户获取的反应
- python - 烧瓶图像变量是“粘”
- tsql - 如何将案例表达式与 where 子句结合使用以将一个文件除以另一个文件?
- excel - 在父对象中调用辅助函数而不在辅助对象中从父对象重新定义对象