Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/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_Arrays - Fatal编程技术网

php根据另一个数组的键值对数组进行排序

php根据另一个数组的键值对数组进行排序,php,arrays,Php,Arrays,我有一个数组: $array_sorter = [ 'XXS' => 1, 'XS' => 2, 'S' => 3, 'M' => 4, 'L' => 5, 'XL' => 6,

我有一个数组:

 $array_sorter = [  
                    'XXS' => 1,   
                    'XS' => 2,  
                    'S' => 3,   
                    'M' => 4,   
                    'L' => 5,   
                    'XL' => 6,   
                    'XXL' => 7  
                 ];
还有一个可能是这样的:

 $array_to_sort = ('XS','M','XL','S','L','XXS')
$weightArray = array();
foreach($array_to_sort as $value){
  $weight = $array_sorter[$value];
  if(!isset($weightArray[$weight])){
    $weightArray[$weight] = array();
  }
  $weightArray[$weight][] = $value;
}
$array_to_sort = array_values(ksort($weightArray));
如何根据第一个对第二个进行排序

我的意思是:

$array_to_sort是大小,但在此数组中是随机的

我需要打印可用尺寸的列表($array_to_sort),但按照@Jakumi所述的$array_sorter的顺序,这是最好的选择。但是,如果您是初学者,这种方法可能更容易理解:

$array_sorter = [
    'XXS' => 1,
    'XS' => 2,
    'S' => 3,
    'M' => 4,
    'L' => 5,
    'XL' => 6,
    'XXL' => 7,
];

$array_to_sort = array('XS', 'M', 'XL', 'S', 'L', 'XXS');

$array_sorted = array();

foreach($array_to_sort as $item){
    $k = $array_sorter[$item];
    $array_sorted[$k] = $item;
}
ksort($array_sorted);

只需将第一个数组用作“权重”提供程序。我的意思是,第一个数组对第二个数组的每个条目都有一个权重(例如,M得到权重4)

循环第二个数组并创建第三个数组:
$weightArray
,如下所示:

 $array_to_sort = ('XS','M','XL','S','L','XXS')
$weightArray = array();
foreach($array_to_sort as $value){
  $weight = $array_sorter[$value];
  if(!isset($weightArray[$weight])){
    $weightArray[$weight] = array();
  }
  $weightArray[$weight][] = $value;
}
$array_to_sort = array_values(ksort($weightArray));
现在有了这样一个数组:
(2=>'XS',4=>'M',5=>'XL',3=>'S',5=>'L',1=>'XXS')

现在,您可以按键
ksort()
对其进行排序,并将其复制回源数组,如下所示:

 $array_to_sort = ('XS','M','XL','S','L','XXS')
$weightArray = array();
foreach($array_to_sort as $value){
  $weight = $array_sorter[$value];
  if(!isset($weightArray[$weight])){
    $weightArray[$weight] = array();
  }
  $weightArray[$weight][] = $value;
}
$array_to_sort = array_values(ksort($weightArray));

PS:如果你有类似于
$array\u to_sort=('XS','M','M','L','XXS')
的东西,它也会起作用=>
$array\u to_sort=('XXS','XS','M','M','M','L')
谢谢大家的建议

我独自找到了这个解决方案:

我的错误是集中在要排序的数组上($arrat\u to\u sort)

相反,我将问题转向:

由于$array_sorter始终包含$arrat_to_sort的所有可能值 按照正确的顺序,我使用了函数array\u intersect($array\u sorter,$arrat\u to\u sort)


我马上在$array\u sorter位置得到了一个值为$arrat\u to\u sort的数组

您这样做的目的是什么,您的预期结果是什么?您所说的“基于第一个”是什么意思?它应该如何排序的可能重复?根据第一个数组的值,您的示例既不是字母顺序的,也不是数字顺序的。它看起来就像一个随机顺序。请更具体地说明您的期望。使用($array\u sorter)(或硬编码)关闭
,也可能重复