【问题标题】:Multidimensional array sorting by value in phpphp中按值排序的多维数组
【发布时间】:2014-04-10 05:27:41
【问题描述】:

我在 php.ini 中有这个多维结果数组。我想在不使用 foreach 循环的情况下按 [name] 的值对该数组进行排序。请帮帮我。

数组必须按 [name] 表示。提前致谢。

Array
 (
 [result] => Array
    (
        [projects] => Array
            (
                [0] => Array
                    (
                        [name] => Project-3
                        [releases] => Array
                            (
                                [0] => Array
                                    (
                                        [id] => 752676125
                                    )
                            )       
                    )
                [1] => Array
                    (
                        [name] => Project-1
                        [releases] => Array
                            (
                                [0] => Array
                                    (
                                        [id] => 752676126
                                    )
                             )      
                    )
                [2] => Array
                    (
                        [name] => Project-2
                        [releases] => Array
                            (
                                [0] => Array
                                    (
                                        [id] => 752676127
                                    )
                            )       
                    )
            )
    )
 )

【问题讨论】:

  • 代码是...?你有什么尝试吗?
  • 请给出这个数组的定义。
  • 大声笑 - 没有 foreach 循环??您认为 php 排序功能如何工作? Foreach 或 for 或 while。
  • @Mr.TK 嗯,我们有排序功能,如 sortusortksort等等,只是说。
  • @Mr.TK 在 php 数组中可以使用 sort、ksort、u sort、asort、arsort 等排序函数在没有 foreach 循环的情况下进行排序...

标签: php multidimensional-array


【解决方案1】:

首先提取$mult_arry['result']['projects']并运行排序功能如下。

<?php
function msort($array, $key, $sort_flags = SORT_REGULAR) {
    if (is_array($array) && count($array) > 0) {
        if (!empty($key)) {
            $mapping = array();
            foreach ($array as $k => $v) {
                $sort_key = '';
                if (!is_array($key)) {
                    $sort_key = $v[$key];
                } else {
                    // @TODO This should be fixed, now it will be sorted as string
                    foreach ($key as $key_key) {
                        $sort_key .= $v[$key_key];
                    }
                    $sort_flags = SORT_STRING;
                }
                $mapping[$k] = $sort_key;
            }
            asort($mapping, $sort_flags);
            $sorted = array();
            foreach ($mapping as $k => $v) {
                $sorted[] = $array[$k];
            }
            return $sorted;
        }
    }
    return $array;
}


$mult_arry=array('result'=>array('projects'=>array(
        array('name'=>'Project-3','releases'=>array(array('id' => 752676125))),
        array('name'=>'Project-1','releases'=>array(array('id' => 752676126))),
        array('name'=>'Project-2','releases'=>array(array('id' => 752676127)))
)));
$mult_arry_extracted=$mult_arry['result']['projects'];
echo "<pre>";
print_r($mult_arry_extracted);
$mult_arry_sorted_byname = msort($mult_arry_extracted, array('name'));


print_r($mult_arry_sorted_byname);
echo "</pre>";
?>

更多信息here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-28
    • 1970-01-01
    • 2023-04-02
    • 2012-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多