【发布时间】:2021-07-13 10:56:44
【问题描述】:
我有一个数组,它的键是大小,值是 'in-stock' 或 'no-stock'。
示例数组:
$data = [
'L' => 'in-stock',
'S' => 'in-stock',
'XL' => 'no-stock',
'M' => 'in-stock',
];
我正在尝试按大小对其进行排序。预期输出为:
$data = [
'S' => 'in-stock',
'M' => 'in-stock',
'L' => 'in-stock',
'XL' => 'no-stock',
];
我一直在研究其他类似的问题,但没有成功,因为它们具有不同的数组结构。
我正在努力使用 uksort 函数,因为我想要对数组进行排序并保留键。
uksort($data, function($a, $b) use ($data) {
static $sizes;
// filter out only used size values => ['S', 'M', 'L', 'XL']
$sizes = array_filter(["XXS", "XS", "S", "M", "L", "XL", "XXL", "XXXL"], function($arr) use ($data) {
return array_key_exists($arr, $data);
});
$sizes = array_values($sizes);
if (array_search($a, $sizes) === array_search($b, array_keys($data))) {
return 0;
}
if (array_search($a, $sizes) < array_search($b, array_keys($data))) {
return -1;
}
if (array_search($a, $sizes) > array_search($b, array_keys($data))) {
return 1;
}
});
结果:
Array
(
[S] => in-stock
[L] => in-stock
[XL] => in-stock
[M] => in-stock
)
我正在尝试比较 $data 中的关键位置并在 $sizes 中定义排序顺序。它不起作用,我正在努力完全理解如何在uksort 回调中正确比较$a 和$b。
https://www.php.net/manual/en/function.uksort.php
如果认为第一个参数分别小于、等于或大于第二个参数,则比较函数必须返回一个小于、等于或大于零的整数。 p>
【问题讨论】: