SilenceOfWinter
@SilenceOfWinter
та еще зажигалка...

Сквозное преобразование массива?

Сегодня весь день хожу и пытаюсь вспомнить - был нативный способ преобразовать
['a' => [11, 12], 'b' => [21, 22]]
в
[['a' => 11, 'b' => 12], ['a' =>21, 'b' => 22]]
в одну строку, но хоть убей не помню как :(
  • Вопрос задан
  • 196 просмотров
Решения вопроса 2
0xD34F
@0xD34F
преобразовать
['a' => [11, 12], 'b' => [21, 22]]
в
[['a' => 11, 'b' => 12], ['a' =>21, 'b' => 22]]

Совершенно не очевидно, почему результат должен быть таким, как вы показали. Почему 12 из a становится значением свойства b, а 21 - наоборот? Опечатка? - наверное, в a исходного массива лежат значения свойств a результата, аналогично и с b.

array_map(fn($i) => array_combine(array_keys($arr), array_column($arr, $i)), array_keys(array_values($arr)[0]))
Ответ написан
profesor08
@profesor08
$array = ["a" => [11, 12], "b" => [21, 22]];

array_map(function($values) use (&$array) {
    $keys = array_keys($array);
    return array_reduce($values, function($carry, $value) use (&$keys) {
        $carry[array_shift($keys)] = $value;
        return $carry;
    }, []);
}, array_values($array));


Еще короче вариант
array_map(fn($key) => array_combine(array_keys($array), $array[$key]), array_keys($array))


Альтернативный
array_map(function ($key) use (&$array) {
    return array_combine(array_keys($array), $array[$key]);
}, array_keys($array));
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы