我有一个像这样创建的数组:
$myarray = array();
$myarray['id1'] = array('pos' => 3, 'data' => '...');
$myarray['id2'] = array('pos' => 1, 'data' => '...');
$myarray['id3'] = array('pos' => 2, 'data' => '...');
我想以$myarray
值的顺序迭代pos
。我怎么能这样做?
我目前看到的唯一方法是从第一个重新创建一个新的有序数组。那太丑了,当然......
编辑:这不是this question的重复。我想保持键与我的子阵列相关联。
答案 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);
}