Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
根据内部数组中的值对PHP多维数组排序?_Php_Sorting - Fatal编程技术网

根据内部数组中的值对PHP多维数组排序?

根据内部数组中的值对PHP多维数组排序?,php,sorting,Php,Sorting,我试图根据内部数组中的特定值对PHP哈希表进行排序。数据结构如下所示: print_r($mydata); Array( [0] => Array ( [type] => suite [name] => A-Name ) [1] => Array ( [type] => suite [name] => C-Name ) [2] => Array (

我试图根据内部数组中的特定值对PHP哈希表进行排序。数据结构如下所示:

print_r($mydata);

Array(
[0] => Array
    (
        [type] => suite
        [name] => A-Name
    )
[1] => Array
    (
        [type] => suite
        [name] => C-Name
    )
[2] => Array
    (
        [type] => suite
        [name] => B-Name
    )
)
usort($my_array, array($this,'cmp'));
我尝试了ksort排序usort,但似乎没有任何效果。我试图根据名称键进行排序,向下两级

这是我使用usort的尝试:

function cmp($a, $b) {
    return $b['name'] - $a['name'];
}

usort($mydata, "cmp");

有没有一种简单的方法可以做到这一点,或者我需要编写一个自定义排序函数?

-对多个或多维数组进行排序

如何使用

 $list = array(
   array( 'type' => 'suite', 'name'=>'A-Name'),
   array( 'type' => 'suite', 'name'=>'C-Name'),
   array( 'type' => 'suite', 'name'=>'B-Name')
 );

$list = array_sort($list, 'name', SORT_ASC);

array(3) { [0]=> array(2) { ["type"]=> string(5) "suite" ["name"]=> string(6) "A-Name"    } [2]=> array(2) { ["type"]=> string(5) "suite" ["name"]=> string(6) "B-Name" } [1]=> array(2) { ["type"]=> string(5) "suite" ["name"]=> string(6) "C-Name" } }

尝试此usort函数:

    function cmp($a, $b){
        if ($a == $b)
            return 0;
        return ($a['name'] < $b['name']) ? -1 : 1;
    }

$my_array = array(
0 => array
    (
        'type' => 'suite'
        ,'name' => 'A-Name'
    )
,1 => array
    (
        'type' => 'suite'
        ,'name' => 'C-Name'
    )
,2 => array
    (
        'type' => 'suite'
        ,'name' => 'B-Name'
    )
);


usort($my_array, "cmp");

输出=>

数组([2]=>数组([e]=>0[f]=>12)[1]=>数组([c]=>4[d]=>2)[0]=>数组([a]=>5[b]=>7))


尝试我在Magento REST API中使用的递归模式:

$parameters = ['searchCriteria' => ['currentPage' => 1, 'pageSize' => 20]];
$parameters['searchCriteria']['filter_groups'][0]['filters'][0] = ['condition_type' => 'from', 'field' => 'updated_at', 'value' => '2017-01-01T00:00:00'];
$parameters['searchCriteria']['filter_groups'][1]['filters'][0] = ['condition_type' => 'to', 'field' => 'updated_at', 'value' => '2017-12-31T23:59:59']; 

function sortArrayByKeyAsc($_params){
    if(is_array($_params)){
        uksort($_params, 'strnatcmp');
        foreach ($_params as $key => $value){
            if(is_array($value)){
                $_params[$key] = sortArrayByKeyAsc($value);
            }
        }
    }
    return $_params;
}

这比PHP手册更友好:那么您是如何尝试usort的呢?我在问题中添加了我的代码。从字符串中减去字符串?!?难怪它不起作用,你看过phpdocs网页上的例子了吗具体来说,这是一个极其复杂的解决方案。@deceze嗨!谢谢你的评论和否决票。你能证明你的意见吗?提前感谢。
usort($mydata,function($a,$b){return strcmp($a['name'],$b['name']);})
-考虑到这工作非常好,是的,我想说你的太复杂了。@deceze是的,当然。但上面(我的)是更“常见”的解决方案。例如,我可以说100种情况(实际上是无限的)——在这种情况下,我的解决方案不会发生任何变化。单一解决方案。您将编写100个usort函数(相同-实际上是无限的)。当然,对于独特的情况-独特的解决方案。只有“通用”的解决方案。好啊我理解你。也许,您是否每次都为每个新的项目类编写代码,例如
响应
请求
控制器
等?1)对于如此短的一行代码,编写一些通用的、几乎无法与MVC基础结构相比的东西并不十分必要。2) 即使对于泛型函数,这也是相当复杂的;参见.Worked a treat,谢谢.uasort($my_数组,函数($a,$b){if($a==$b)返回0;返回($a['name']<$b['name'])?-1:1;});
 <?php
$a=array(
array('a'=>5,'b'=>7),array('c'=>4,'d'=>2),array('e'=>0,'f'=>12)

    );
function cmp_sort($x,$y){           //your function to compare two keys
if($x===$y)
    return 0;
else
    return ($x<$y?1:-1);
}

uasort($a,'cmp_sort');    //call user-defined compare function
print_r($a);              //printing the sorted array


?>
$this->aasort($array,"key");

function aasort (&$array, $key) {
    $sorter=array();
    $ret=array();
    reset($array);

    foreach ($array as $ii => $va) {
        $sorter[]=$va[$key];
    }

    arsort($sorter);

    foreach ($sorter as $ii => $va) {
        $ret[]=$array[$ii];
    }

    return $array=$ret;
}
$parameters = ['searchCriteria' => ['currentPage' => 1, 'pageSize' => 20]];
$parameters['searchCriteria']['filter_groups'][0]['filters'][0] = ['condition_type' => 'from', 'field' => 'updated_at', 'value' => '2017-01-01T00:00:00'];
$parameters['searchCriteria']['filter_groups'][1]['filters'][0] = ['condition_type' => 'to', 'field' => 'updated_at', 'value' => '2017-12-31T23:59:59']; 

function sortArrayByKeyAsc($_params){
    if(is_array($_params)){
        uksort($_params, 'strnatcmp');
        foreach ($_params as $key => $value){
            if(is_array($value)){
                $_params[$key] = sortArrayByKeyAsc($value);
            }
        }
    }
    return $_params;
}