如何按reference字段的数值部分对PHP多维数组排序?
按带短横线的
reference字段排序PHP多维数组 要实现按包含短横线的字母数字类型reference字段排序,以下两种方法可以直接解决你的需求:
方法一:usort() + strnatcmp()组合
strnatcmp()会按照自然排序规则对比字符串,能正确识别数字部分的数值大小,完美适配带短横线的字母数字场景。
// 原始数组 $array = [ ['other_value' => 'y', 'reference' => '423-52'], ['other_value' => 'y', 'reference' => '223-52'], ['other_value' => 'y', 'reference' => '5423-52'], ['other_value' => 'y', 'reference' => '823-52'], ['other_value' => 'y', 'reference' => '123-52'] ]; // 执行排序 usort($array, function($a, $b) { return strnatcmp($a['reference'], $b['reference']); }); // 输出结果 print_r($array);
执行后将得到你预期的排序结果:
Array ( [0] => Array ( [other_value] => y [reference] => 123-52 ) [1] => Array ( [other_value] => y [reference] => 223-52 ) [2] => Array ( [other_value] => y [reference] => 423-52 ) [3] => Array ( [other_value] => y [reference] => 823-52 ) [4] => Array ( [other_value] => y [reference] => 5423-52 ) )
方法二:array_multisort()批量排序
先提取所有reference字段的值,再基于自然排序规则对原数组排序,适合需要同时处理多字段排序的场景:
// 提取reference列的所有值 $references = array_column($array, 'reference'); // 按自然排序规则同步排序原数组 array_multisort($references, SORT_NATURAL, $array); print_r($array);
此方法同样能得到符合预期的排序结果。
内容的提问来源于stack exchange,提问作者Michu
相关产品推荐
相关产品推荐

