原始阵列:
$resolutions = array (
"Desktop monitor" => array (
//Standard 4:3
"800x600" => "800x600",
"1024x768" => "1024x768",
"1600x1200" => "1600x1200",
//Wide 16:10
"960x600" => "960x600",
"1280x800" => "1280x800",
"1440x900" => "1440x900",
"1680x1050" => "1680x1050",
"1920x1200" => "1920x1200",
),
"Apple" => array (
"DeviceX" => "2048x1536",
"DeviceY" => "1024x768",
),
);
wanted阵列:
$resolutions = array (
"Desktop monitor" => array (
"800x600" => "800x600",//Standard 4:3
"960x600" => "960x600",//Wide 16:10
"1024x768" => "1024x768",//Standard 4:3
"1280x800" => "1280x800",//Wide 16:10
"1440x900" => "1440x900",//Wide 16:10
"1600x1200" => "1600x1200",//Standard 4:3
"1680x1050" => "1680x1050",//Wide 16:10
"1920x1200" => "1920x1200",//Wide 16:10
),
"Apple" => array (
"DeviceY" => "1024x768",
"DeviceX" => "2048x1536",
),
);
foreach ($resolutions as $screen => $resolution) {
foreach($resolution as $key => $val) {
$newarray[$key] = $row[$val];
}
array_multisort($newarray, SORT_DESC, $resolution);
}
我以为我已经结束了一半,但是上面的代码给了我一些不觉得(对我而言),即:第一次分辨率1024x768,然后是1280x800,其次是1440x900,最后是800x600.,
foreach ($resolutions as &$resolution)
uasort($resolution, function ($a, $b) { return array_product(explode('x', $a)) - array_product(explode('x', $b)); });
您在外部阵列中循环并使用MultiSort对单维数组进行排序;我建议只使用Asort()。
不确定在那里发生了什么,$分辨率将作为THRID参数传递。它想要一系列排序标志。foreach ($resolutions as $resolution) {
asort($resolution);
}
这是一个专门针对
Desktop monitor
数组键的快速黑客。
ksort
x
时,它并不顺利。这是我的解决方案:
环通过阵列构建新数组,仅分辨率的前半部分作为数组键使用
ksort
array_walk
您可以为原始数组中的其他阵列做同样的事情,例如
Apple
键作为分辨率,然后将
array_walk
由于您的样本维度值始终显示在
x
定界符之前的数字较大,并且没有明显的瘦或脂肪比率,因此每个集合上的关键保留自然排序都可以解决问题。 demo
array_walk(
$resolutions,
function (&$row) {
asort($row, SORT_NATURAL);
}
);
var_export($resolutions);
如果您的项目具有更多的鼠标尺寸值,则应将迭代的计算最小化。 demo