我找到了关于排序多维数组的几个答案,但没有一个是我拥有的数组类型。
我的数组看起来像这样:
$data[1][1][1] = 100; // 1,1,1
$data[1][1][2] = 120; // 1,1,2
$data[1][2][1] = 140; // 1,2,1
// Several hundred permutations to follow.
要分类到......
$data[1][2][1] = 140; // 140 is higher than 120.. etc.
$data[1][1][2] = 120;
$data[1][1][1] = 100;
如何根据数据对数据进行排序,并返回密钥?
2注意事项:尺寸实际上是无限的,一些数组键是字符串,而不仅仅是数字。例如$ data [1] [" type"] [1] = 100; 谢谢。
顺便说一下..我已经尝试了几种组合,没有成功......
答案 0 :(得分:0)
这是不可能的,因为多级别数组没有一个订单。每个子阵列都有自己的顺序。例如。
$data[1][1][1] = 100;
$data[1][1][2] = 140;
$data[1][2][1] = 120;
应该返回
$data[1][1][1] = 100;
$data[1][2][1] = 120;
$data[1][1][2] = 140;
但整个数组$data[1][2]
应该在整个$data[1][1]
之后或之前,而不是在同一时间。
但是如果你想对值进行排序并保持键(但结构会有所不同),你可以使用这段代码。
$data[1][1][1] = 100;
$data[1][1][2] = 140;
$data[1][2][1] = 120;
function getValue($array, array &$sortable_array = null, $keys = array())
{
foreach ($array as $key => $item)
{
$current_keys = array_merge($keys, [$key]);
if (is_array($item))
getValue($item, $sortable_array, $current_keys);
else
{
$sortable_array[] = ['value' => $item, 'keys' => $current_keys];
}
}
}
getValue($data, $sortable_array);
usort($sortable_array, function($a, $b)
{ return $a > $b ? -1 : 1; });
// print_r($sortable_array);
// debug output
array_map(function($e)
{ echo json_encode($e) . PHP_EOL; }, $sortable_array);
//{"value":140,"keys":[1,1,2]}
//{"value":120,"keys":[1,2,1]}
//{"value":100,"keys":[1,1,1]}