我有一个平面关联数组,它可能包含重复的值。
Array (
[for-juniors] => product_category
[for-men] => product_category
[coats] => product_category
[for-women] => product_category
[7-diamonds] => brand
) 我需要重新构造数据以将原始值存储为新键,并将原始键推入与新键关联的子数组中。
array(
'product_category' => array(
'for-juniors',
'for-men',
'coats',
'for-women'
),
'brand' => array(
'7-diamonds'
)
);发布于 2012-09-14 21:23:15
$grouped = array();
foreach ($input as $choice => $group) {
$grouped[$group][] = $choice;
}
var_dump($grouped);发布于 2021-10-21 12:57:46
这样就可以了:
function array_flip_safe(array $array) : array
{
return array_reduce(array_keys($array), function ($carry, $key) use (&$array) {
$carry[$array[$key]] ??= []; // PHP 7.0 - ^7.3: $carry[$array[$key]] = $carry[$array[$key]] ?? [];
$carry[$array[$key]][] = $key;
return $carry;
}, []);
}如果数组不存在,该回调将创建一个空数组。然后将当前迭代的$key ($value of array_keys($array))附加到该数组。
为了更好地理解,这里有一个例子:
$businessHours = [
'mo' => '13:00 - 16:00',
'tu' => '8:00 - 12:00',
'we' => '13:00 - 16:00',
'th' => '8:00 - 12:00',
'fr' => '13:00 - 16:00',
'sa' => '',
'su' => '',
];
$flipped = array_flip_safe($businessHours);ray($flipped); (或var_dump、var_export等)输出:
array:3 [▼
"13:00 - 16:00" => array:3 [▼
0 => "mo"
1 => "we"
2 => "fr"
]
"8:00 - 12:00" => array:2 [▼
0 => "tu"
1 => "th"
]
"" => array:2 [▼
0 => "sa"
1 => "su"
]
]请注意,内部数组的值的顺序与原始数组的键的顺序相同。
https://stackoverflow.com/questions/12425449
复制相似问题