CakePHP 4中Collection::sortBy()排序无效问题咨询
问题原因与解决方法
你遇到的问题核心是**sortBy()默认保留原数组的数字键名**,而PHP会自动将带数字键的数组按键值重新排序,导致你看到的结果和原数组一致。
两种解决办法
方法一:重置数组键
在sortBy()之后调用values()方法,重置数组的键为连续的数字索引,这样toArray()就能输出正确的排序结果:
$sorted = collection($accounts) ->sortBy('email', SORT_ASC) ->values() ->toArray();
方法二:禁用键保留
调用sortBy()时传入第三个参数false,告诉方法不要保留原数组的键名:
$sorted = collection($accounts) ->sortBy('email', SORT_ASC, false) ->toArray();
执行任意一种修改后,debug($sorted)都会输出按邮箱字母顺序排序后的数组:
[ [ 'email' => 'dom@example.com', 'isBlocked' => false, ], [ 'email' => 'guy@example.com', 'isBlocked' => false, ], [ 'email' => 'me@example.com', 'isBlocked' => false, ], [ 'email' => 'test@example.com', 'isBlocked' => false, ], [ 'email' => 'webmaster@example.com', 'isBlocked' => false, ] ]
内容的提问来源于stack exchange,提问作者Oliv
相关产品推荐
相关产品推荐

