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'];
});