根据子值对数组进行排序的最佳方法

时间:2015-06-07 14:04:27

标签: php

我有一个像这样创建的数组:

$myarray = array();
$myarray['id1'] = array('pos' => 3, 'data' => '...');
$myarray['id2'] = array('pos' => 1, 'data' => '...');
$myarray['id3'] = array('pos' => 2, 'data' => '...');

我想以$myarray值的顺序迭代pos。我怎么能这样做?

我目前看到的唯一方法是从第一个重新创建一个新的有序数组。那太丑了,当然......

编辑:这不是this question的重复。我想保持键与我的子阵列相关联。

2 个答案:

答案 0 :(得分:3)

您可以使用$myarray['id1'] = array('pos' => 3, 'data' => '...'); $myarray['id2'] = array('pos' => 1, 'data' => '...'); $myarray['id3'] = array('pos' => 2, 'data' => '...'); uasort ($myarray, function($it1, $it2) { return $it1['pos'] - $it2['pos']; }); var_dump($myarray); array(3) { ["id2"]=> array(2) { ["pos"]=> int(1) ["data"]=> string(3) "..." } ["id3"]=> array(2) { ["pos"]=> int(2) ["data"]=> string(3) "..." } ["id1"]=> array(2) { ["pos"]=> int(3) ["data"]=> string(3) "..." } } http://php.net/manual/en/function.uasort.php

定义自定义排序函数:

uasort

答案 1 :(得分:2)

您可以使用uasort保存密钥

function downloadFile(filename, data) {

    var a = document.createElement('a');
    a.style = "display: none";  
    var blob = new Blob(data, {type: "application/octet-stream"});
    var url = window.URL.createObjectURL(blob);
    a.href = url;
    a.download = filename;
    document.body.appendChild(a);
    a.click();
    document.body.removeChild(a);
    window.URL.revokeObjectURL(url);    
}