按键对php不同格式的多维数组进行排序
按键对php不同格式的多维数组进行排序
我有一个像这样的数组:
Array ( [name] => Array ( [0] => img/test240.jpg [1] => img/cs1.jpg [2] => img/cs2.jpg [3] => img/cs3.jpg ) [link] => Array ( [0] => http://google.com [1] => http://google.com [2] => http://facebook.com [3] => http://orkut.com ) [order] => Array ( [0] => 4 [1] => 1 [2] => 2 [3] => 3 ) )
我需要根据多维数组中的键“order”对其进行排序。下面是输出结果。
Array ( [name] => Array ( [1] => img/cs1.jpg [2] => img/cs2.jpg [3] => img/cs3.jpg [0] => img/test240.jpg ) [link] => Array ( [1] => http://google.com [2] => http://facebook.com [3] => http://orkut.com [0] => http://google.com ) [order] => Array ( [1] => 1 [2] => 2 [3] => 3 [0] => 4 ) )
在这个示例中,当排序时,可以看到name和link也根据order进行了排序。我该如何用php实现这个功能。
问题的原因是需要按照"order"数组的顺序对多维数组进行排序,但是使用了不正确的排序函数。解决方法是使用array_map()函数与sort()函数结合使用,并且使用asort()函数代替sort()函数,以保持实际元素的顺序。以下是解决方法的代码示例:
$arr = array( 'name' => array( 0 => 'img/test240.jpg', 1 => 'img/cs1.jpg', 2 => 'img/cs2.jpg', 3 => 'img/cs3.jpg', ), 'link' => array( 0 => 'http://google.com', 1 => 'http://google.com', 2 => 'http://facebook.com', 3 => 'http://orkut.com', ), 'order' => array( 0 => 4, 1 => 1, 2 => 2, 3 => 3, ), ); function mysort($a) { asort($a); return $a; } $arr = array_map('mysort', $arr); print_r($arr);
以上代码通过array_map()函数和自定义的mysort()函数对多维数组$arr进行排序,最后使用print_r()函数输出排序后的结果。运行代码可以查看Demo示例。然而,这段代码可能无法按照"order"数组的顺序进行排序。
问题:如何对PHP中不同格式的多维数组按键进行排序?
原因:在处理多维数组时,可能需要按照某个键对数组进行排序,以满足特定的需求。
解决方法:使用array_multisort函数来对多维数组按键进行排序。
以下是解决方法的代码示例:
$array holds: array (size=3) 'name' => array (size=4) 0 => string 'img/test240.jpg' (length=15) 1 => string 'img/cs1.jpg' (length=11) 2 => string 'img/cs2.jpg' (length=11) 3 => string 'img/cs3.jpg' (length=11) 'link' => array (size=4) 0 => string 'http://google.com' (length=17) 1 => string 'http://google.com' (length=17) 2 => string 'http://facebook.com' (length=19) 3 => string 'http://orkut.com' (length=16) 'order' => array (size=4) 0 => string '4' (length=1) 1 => string '1' (length=1) 2 => string '2' (length=1) 3 => string '3' (length=1) Code: $sort = array(); foreach($array as $k) { foreach($k as $ind=>$val){ $sort['name'][$ind] = $array['name'][$ind]; $sort['link'][$ind] = $array['link'][$ind]; $sort['order'][$ind] = $array['order'][$ind]; } } array_multisort($sort['order'], SORT_ASC, $sort['link'], SORT_ASC, $sort['name'], SORT_ASC); var_dump($sort); Output: array (size=3) 'name' => array (size=4) 0 => string 'img/cs1.jpg' (length=11) 1 => string 'img/cs2.jpg' (length=11) 2 => string 'img/cs3.jpg' (length=11) 3 => string 'img/test240.jpg' (length=15) 'link' => array (size=4) 0 => string 'http://google.com' (length=17) 1 => string 'http://facebook.com' (length=19) 2 => string 'http://orkut.com' (length=16) 3 => string 'http://google.com' (length=17) 'order' => array (size=4) 0 => string '1' (length=1) 1 => string '2' (length=1) 2 => string '3' (length=1) 3 => string '4' (length=1)
以上代码通过使用array_multisort函数对多维数组按键进行排序,实现了按照'order'键的升序排列,并且保持其他键的对应关系不变。最终的输出结果中,'name'、'link'和'order'键的值按照'order'键的排序顺序进行了调整。
这段代码中的函数`my_sort_2`是用来对多维数组进行排序的。该函数首先判断数组中的每一个元素是否为数组,如果是,则递归调用`my_sort_2`函数对该子数组进行排序。然后,判断数组是否为非关联数组(即索引数组),如果是,则根据指定的排序顺序对数组进行重新排序。最后,返回排序后的数组。
为了判断一个数组是否为关联数组,代码中引入了`is_assoc`函数,该函数通过获取数组的键值并判断索引数组和键数组是否相等来判断一个数组是否为关联数组。
为了运行`my_sort_2`函数,需要将其包含在代码中,并在之后调用`print_r(my_sort_2($arr,$this_arr))`来输出排序后的数组。
这段代码的目的是对多维数组进行按照指定顺序排序的操作。
原文链接:https://stackoverflow.com/questions/5996749
参考来源:https://stackoverflow.com/questions/5996749