PHP-通过维护原始数组键按子数组值对数组排序
我希望使用子数组值(“名称”)对数组进行排序,但保留其原始数组键 默认数组:PHP-通过维护原始数组键按子数组值对数组排序,php,sorting,multidimensional-array,Php,Sorting,Multidimensional Array,我希望使用子数组值(“名称”)对数组进行排序,但保留其原始数组键 默认数组: Array ( [251] => Array ( [color] => [name] => 8 [nbr] => 1 [url_name] => taille-8 [meta_title] => ) [323]
Array (
[251] => Array
(
[color] =>
[name] => 8
[nbr] => 1
[url_name] => taille-8
[meta_title] =>
)
[323] => Array
(
[color] =>
[name] => 7
[nbr] => 2
[url_name] => taille-7
[meta_title] =>
)
[127] => Array
(
[color] =>
[name] => 34
[nbr] => 2
[url_name] => taille-34
[meta_title] =>
)
);
通过使用array_multisort,我可以得到以下数组:
Array(
[0] => Array
(
[color] =>
[name] => 7
[nbr] => 2
[url_name] => taille-7
[meta_title] =>
)
[1] => Array
(
[color] =>
[name] => 8
[nbr] => 1
[url_name] => taille-8
[meta_title] =>
)
[2] => Array
(
[color] =>
[name] => 34
[nbr] => 2
[url_name] => taille-34
[meta_title] =>
)
);
但我需要的是
Array(
[323] => Array
(
[color] =>
[name] => 7
[nbr] => 2
[url_name] => taille-7
[meta_title] =>
)
[251] => Array
(
[color] =>
[name] => 8
[nbr] => 1
[url_name] => taille-8
[meta_title] =>
)
[127] => Array
(
[color] =>
[name] => 34
[nbr] => 2
[url_name] => taille-34
[meta_title] =>
)
);
感谢adv:)
$arr
成为您的阵列:
//obtain list of values to sort by
foreach ($arr as $id => $value) {
$names[$id] = $value['name'];
}
$keys = array_keys($arr);
array_multisort(
$names, SORT_ASC, SORT_NUMERIC, $arr, $keys
);
$result = array_combine($keys, $arr);
您可能错过了将数组与给定键组合的最后一步
$arr
假设您的数组包含数字键,并使用数组\u multisort
对其进行排序
array\u multisort
将返回已排序的数组array\u combine
将原始密钥与排序的数组组合
使用:
$result = array_sort_by_column_preserve_keys($arr);
echo '<pre>';print_r($result);echo '</pre>';
$array=array(
"251" => array(
"color" => "",
"name" => 8,
"nbr" => 1,
"url_name" => "taille-8",
"meta_title" => ""),
"323" => array(
"color" => "",
"name" => 7,
"nbr" => 2,
"url_name" => "taille-7",
"meta_title" => ""),
"127" => array(
"color" => "",
"name" => 34,
"nbr" => 2,
"url_name" => "taille-34",
"meta_title" => ""),
);
function swapArray( &$arr,$firstPos,$secondPos){
//echo PHP_EOL."swap: ".$firstPos.", ".$secondPos.PHP_EOL;
foreach($arr[$firstPos] as $k=>$v){
//echo PHP_EOL.$k." => ".$v.PHP_EOL;
$tmp=$v;
$arr[$firstPos][$k]=$arr[$secondPos][$k];
$arr[$secondPos][$k]=$tmp;
}
}
var_dump($array);
$keys=array(); // store all key values
$num=count($array);
foreach($array as $key=>$tmpArray)
$keys[]=$key;
//var_dump($keys);
for($i=0; $i<$num; $i++){
for($j=$i+1; $j<$num; $j++){
if($array[$keys[$i]]["name"]>$array[$keys[$j]]["name"]){
swapArray($array,$keys[$i],$keys[$j]);
}
}
}
var_dump($array);
请试试这个
$array=array(
“251”=>数组(
“颜色”=>“”,
“名称”=>8,
“nbr”=>1,
“url_name”=>“taille-8”,
“meta_title=>”),
“323”=>阵列(
“颜色”=>“”,
“名称”=>7,
“nbr”=>2,
“url_name”=>“taille-7”,
“meta_title=>”),
“127”=>数组(
“颜色”=>“”,
“名称”=>34,
“nbr”=>2,
“url_name”=>“taille-34”,
“meta_title=>”),
);
函数swapArray(&$arr、$firstPos、$secondPos){
//echo PHP_EOL.“swap:”.$firstPos.,“$secondPos.PHP_EOL;
foreach($arr[$firstPos]为$k=>$v){
//echo PHP_EOL.$k.“=>”$v.PHP_EOL;
$tmp=$v;
$arr[$firstPos][$k]=$arr[$secondPos][$k];
$arr[$secondPos][$k]=$tmp;
}
}
变量转储($数组);
$keys=array();//存储所有键值
$num=计数($array);
foreach($key=>$tmpArray的数组)
$keys[]=$key;
//var_dump($keys);
对于($i=0;$i我会选择,这对我来说更简单:
下面是一个示例:检查usort函数请添加数组\u多排序
code您可以编辑我的答案,因为答案基本相同。我检查了您的代码,没有给出result@NarayanBhandari请再次检查:
$array=array(
"251" => array(
"color" => "",
"name" => 8,
"nbr" => 1,
"url_name" => "taille-8",
"meta_title" => ""),
"323" => array(
"color" => "",
"name" => 7,
"nbr" => 2,
"url_name" => "taille-7",
"meta_title" => ""),
"127" => array(
"color" => "",
"name" => 34,
"nbr" => 2,
"url_name" => "taille-34",
"meta_title" => ""),
);
function swapArray( &$arr,$firstPos,$secondPos){
//echo PHP_EOL."swap: ".$firstPos.", ".$secondPos.PHP_EOL;
foreach($arr[$firstPos] as $k=>$v){
//echo PHP_EOL.$k." => ".$v.PHP_EOL;
$tmp=$v;
$arr[$firstPos][$k]=$arr[$secondPos][$k];
$arr[$secondPos][$k]=$tmp;
}
}
var_dump($array);
$keys=array(); // store all key values
$num=count($array);
foreach($array as $key=>$tmpArray)
$keys[]=$key;
//var_dump($keys);
for($i=0; $i<$num; $i++){
for($j=$i+1; $j<$num; $j++){
if($array[$keys[$i]]["name"]>$array[$keys[$j]]["name"]){
swapArray($array,$keys[$i],$keys[$j]);
}
}
}
var_dump($array);
// $arr is your Array
uasort($arr, function ($a, $b) {
return $a['name'] - $b['name'];
});