为什么不明确命名回调参数,为什么不应该通过array_walk()调用本机排序函数?

问题描述 投票:0回答:1
我对2D数组进行了一些测试,发现在某些情况下,当数组键为2、5、10或13时,本机分类功能可以给出意外的结果。

$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值测试

constant

INTEGER值

Description
php arrays sorting multidimensional-array array-walk
1个回答
0
投票


Sort_regular
0

标准比较


SORT_NUMERIC
1

数字比较


SORT_STRING

2

String比较
Sort_locale_string5基于环境设置的String比较SORT_NATURAL6自然顺序字符串比较SORT_FLAG_CASE8casel-nimentiment Setting(与sort_string或sort_natural一起使用) relevant的组合标志:INTEGER值10(2 + 8)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()
💣2017-05-24答案: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答案

💣2012-01-03答案:
sort()


💣2010-12-07答案:array_walk($pairs, 'sort');
💣2009-12-07问题:
array_walk($sorted, 'sort');

⭐要避免这些错误,请明确将所需的参数传递到排序函数:

array_walk($a, 'ksort');
带有明确的回调签名:

array_walk($array, 'asort');
通过引用在一个foreach循环中进行转换:
array_walk($data, 'sort');


在foreach循环中索要键访问的行:
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)必须通过参考,值给定
传递

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.