$expected = range(0, 11);
$array = array_fill(0, 50, $expected); // create a 2d array with 50 rows containing 12 integer values
array_walk($array, 'sort'); // sort the 12 integer values within each row
var_export(
array_filter(
$array,
fn($row) => $row !== $expected // only keep rows which are sorted incorrectly
)
);
❌第二级浮点值测试
✅第二级非数字字符串值测试
❌第二级int值测试
很少有人意识到问题,因为
sort()
sort()
以意外的第二个参数为单位。
当以这种方式实施时,它将两个参数传递给回调函数 -
sort()
通过参考以及sort()
第二个论点是为了始终如一的排序标志,而不是不断变化的数组键。 2、5、10和13的数量键与排序标志常数相对应,该标志常数要求将值作为字符串而不是数字值进行比较。基本排序常数列表:
INTEGER值
Description
Sort_regular
0标准比较
SORT_NUMERIC
1数字比较
SORT_STRING
2
String比较
krsort()
💣2020-04-28答案:krsort()
constant | ||
SORT_STRING| sort_flag_case | ||
SORT_LOCALE_STRING| sort_natural | 13(5 + 6) | |
即使某些堆栈溢出帖子在其上下文中正常工作,更好的做法是不允许您的代码库使用这些潜在的无声袋生产商。 💣2021-02-17答案: |
💣💣2018-08-02问题:
krsort()
array_walk($array, 'sort');
array_walk($array, sort(...));
💣2014-11-03答案:sort()
array_walk()
$value
💣2012-07-09问题:$key
💣2015-08-08答案: | |
---|---|
💣2014-04-14答案: | |
💣2012-11-06答案 |
array_walk($pairs, 'sort');
💣2009-12-07问题:
array_walk($sorted, 'sort');
⭐要避免这些错误,请明确将所需的参数传递到排序函数:
array_walk($a, 'ksort');
带有明确的回调签名:
array_walk($array, 'asort');
通过引用在一个foreach循环中进行转换:array_walk($data, 'sort');
array_walk($arr, 'sort');
array_walk($array, 'ksort');
array_walk($array,'krsort');
在in in in in never in nose in nose in nose in nose in note in noce nock in noce nock nock nock nock nock nock nock nock nock nock nock nock nock nock nock nock nock nock nock buggy;他们只会发出致命错误,因为他们只接受一个参数。致命错误:未被发现的参数counterror:natsort()正好期望1个参数,2给定
💣尝试使用
array_walk($counts, 'ksort', SORT_NUMERIC);
(例如array_walk($complex, 'asort');
)将返回所有值,并发出警告。
战争:sort():参数#1($ array)必须通过参考,值给定传递