<p>PHP二维数组排序,按某个字段排序。平时简单的一维数组或者简单的数组排序这里就不多作介绍,这里主要是针对平时做项目中的可能遇到的情况,根据多维数组中的其中一个排序。 </p><p>这里是本篇主要要说通过array_multisort 进行数组字段排序:</p><p>官网对array_multisort函数的解释: </p><p>对多个数组或多维数组进行排序</p><pre class="brush:php;toolbar:false">bool array_multisort ( array $ar1 [, mixed $arg [, mixed $... [, array $... ]]] )</pre><p>成功时返回 TRUE, 或者在失败时返回 FALSE.</p><p>array_multisort() 可以用来一次对多个数组进行排序,或者根据某一维或多维对多维数组进行排序。关联(string)键名保持不变,但数字键名会被重新索引。</p><p>输入数组被当成一个表的列并以行来排序——这类似于 SQL 的 ORDER BY 子句的功能。第一个数组是要排序的主要数组。数组中的行(值)比较为相同的话就按照下一个输入数组中相应值的大小来排序,依此类推。</p><p>本函数的参数结构有些不同寻常,但是非常灵活。第一个参数必须是一个数组。接下来的每个参数可以是数组或者是下面列出的排序标志。</p><p><span style="color: rgb(255, 0, 0);">排序顺序标志:</span></p><p><span style="font-size: 14px;">SORT_ASC - 按照上升顺序排序</span></p><p><span style="font-size: 14px;">SORT_DESC - 按照下降顺序排序</span></p><p><span style="color: rgb(255, 0, 0);">排序类型标志:</span></p><p><span style="font-size: 14px;">SORT_REGULAR - 将项目按照通常方法比较</span></p><p><span style="font-size: 14px;">SORT_NUMERIC - 将项目按照数值比较</span></p><p><span style="font-size: 14px;">SORT_STRING - 将项目按照字符串比较</span></p><p>每个数组之后不能指定两个同类的排序标志。每个数组后指定的排序标志仅对该数组有效 - 在此之前为默认值 SORT_ASC 和 SORT_REGULAR。</p><p>例1:<br/></p><pre class="brush:php;toolbar:false">$ar = array( array("b10", 'c11', 101, 100, "a"), array(1, 2, "2", 9, 5) ); array_multisort($ar[0], SORT_ASC, SORT_STRING, $ar[1], SORT_NUMERIC, SORT_DESC); print_r($ar);</pre><p>经过排序后,第一个数组将包含 "b10", 'c11',101,100,"a"(作为字符串上升排序),第二个数组将包含 1,2,"2",9,5(作为数值下降排序)。</p><pre class="brush:php;toolbar:false">Array ( [0] => Array ( [0] => 100 [1] => 101 [2] => a [3] => b10 [4] => c11 ) [1] => Array ( [0] => 9 [1] => 2 [2] => 5 [3] => 1 [4] => 2 ) )</pre><p>例2:(我们要的结果)</p><pre class="brush:php;toolbar:false">$data[] = array('customer_name' => '小李', 'money' => 12, 'distance' => 2, 'address' => '长安街C坊'); $data[] = array('customer_name' => '王晓', 'money' => 30, 'distance' => 10, 'address' => '北大街30号'); $data[] = array('customer_name' => '赵小雅', 'money' => 89, 'distance' => 6, 'address' => '解放路恒基大厦A座'); $data[] = array('customer_name' => '小月', 'money' => 150, 'distance' => 5, 'address' => '天桥十字东400米'); $data[] = array('customer_name' => '李亮亮', 'money' => 45, 'distance' => 26, 'address' => '天山西路198弄'); $data[] = array('customer_name' => '董娟', 'money' => 67, 'distance' => 17, 'address' => '新大南路2号'); // 取得列的列表 foreach ($data as $key => $row) { $distance[$key] = $row['distance']; $money[$key] = $row['money']; } array_multisort($distance, SORT_DESC, $data); print_r($data);</pre><p>$data包含有行的数组,但是 array_multisort() 需要一个包含列的数组,因此用foreach来取得列,然后排序。</p><p>所有,我们将array_multisort() 封装下:</p><pre class="brush:php;toolbar:false">/** * 二维数组根据某个字段排序 * @param array $array 要排序的数组 * @param string $keys 要排序的键字段 * @param string $sort 排序类型 SORT_ASC SORT_DESC * @return array 排序后的数组 */ function arraySort($array, $keys, $sort = SORT_DESC) { $keysValue = []; foreach ($array as $k => $v) { $keysValue[$k] = $v[$keys]; } array_multisort($keysValue, $sort, $array); return $array; }</pre><p>继续使用上例中的$data 数组</p><p><strong># 按距离降序排序</strong></p><pre class="brush:php;toolbar:false">$a = arraySort($data, 'distance', SORT_DESC); print_r($a);</pre><p><strong># 按money升序排序</strong></p><pre class="brush:php;toolbar:false">$b = arraySort($data, 'money', SORT_ASC); print_r($b);</pre><p>效果:</p><pre class="brush:php;toolbar:false">Array ( [0] => Array ( [customer_name] => 李亮亮 [money] => 45 [distance] => 26 [address] => 天山西路198弄 ) [1] => Array ( [customer_name] => 董娟 [money] => 67 [distance] => 17 [address] => 新大南路2号 ) [2] => Array ( [customer_name] => 王晓 [money] => 30 [distance] => 10 [address] => 北大街30号 ) [3] => Array ( [customer_name] => 赵小雅 [money] => 89 [distance] => 6 [address] => 解放路恒基大厦A座 ) [4] => Array ( [customer_name] => 小月 [money] => 150 [distance] => 5 [address] => 天桥十字东400米 ) [5] => Array ( [customer_name] => 小李 [money] => 12 [distance] => 2 [address] => 长安街C坊 ) ) Array ( [0] => Array ( [customer_name] => 李亮亮 [money] => 45 [distance] => 26 [address] => 天山西路198弄 ) [1] => Array ( [customer_name] => 董娟 [money] => 67 [distance] => 17 [address] => 新大南路2号 ) [2] => Array ( [customer_name] => 王晓 [money] => 30 [distance] => 10 [address] => 北大街30号 ) [3] => Array ( [customer_name] => 赵小雅 [money] => 89 [distance] => 6 [address] => 解放路恒基大厦A座 ) [4] => Array ( [customer_name] => 小月 [money] => 150 [distance] => 5 [address] => 天桥十字东400米 ) [5] => Array ( [customer_name] => 小李 [money] => 12 [distance] => 2 [address] => 长安街C坊 ) ) Array ( [0] => Array ( [customer_name] => 小李 [money] => 12 [distance] => 2 [address] => 长安街C坊 ) [1] => Array ( [customer_name] => 王晓 [money] => 30 [distance] => 10 [address] => 北大街30号 ) [2] => Array ( [customer_name] => 李亮亮 [money] => 45 [distance] => 26 [address] => 天山西路198弄 ) [3] => Array ( [customer_name] => 董娟 [money] => 67 [distance] => 17 [address] => 新大南路2号 ) [4] => Array ( [customer_name] => 赵小雅 [money] => 89 [distance] => 6 [address] => 解放路恒基大厦A座 ) [5] => Array ( [customer_name] => 小月 [money] => 150 [distance] => 5 [address] => 天桥十字东400米 ) )</pre><p>以上就是关于“PHP二维数组排序,按某个字段排序”的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流。</p>