4

重複する値を含む可能性のあるフラットな連想配列があります。

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'
    )
);
4

2 に答える 2

6
$grouped = array();
foreach ($input as $choice => $group) {
    $grouped[$group][] = $choice;
}

var_dump($grouped);
于 2012-09-14T13:23:14.993 に答える
0

これでできます:

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( $valueof 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_dumpvar_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"
  ]
]

内部配列の値の順序は、元の配列のキーの順序と同じであることに注意してください。

于 2021-10-21T12:57:45.813 に答える