Как объединить и транспонировать 2 PHP-массива - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть два простых PHP-массива, например:

types = ['a', 'b', 'c'];      // 3x1 array
numbers = [1, 2, 3];          // 3x1

Я хочу реструктурировать данные (т. Е. Транспонировать + объединить их), чтобы иметь возможность их циклически проходить следующим образом:

result = [['a', 1], ['b', 2], ['c', 3]];    // 3x2

Есть ли разумный способ добиться этого в PHP с помощью некоторой встроенной функции array_XXX, или мне нужно циклически повторять обе функции, чтобы составлять их вручную? Спасибо.

Ответы [ 3 ]

0 голосов
/ 12 сентября 2018

Если вы создадите один массив из обоих, то зациклите один из подмассивов, который вы можете использовать ключом в array_column.

$arr = [$types, $numbers];

foreach($arr[0] as $key => $val){
    $new[] = array_column($arr, $key);
}

var_dump($new);

Выход

array(3) {
  [0]=>
  array(2) {
    [0]=>
    string(1) "a"
    [1]=>
    int(1)
  }
  [1]=>
  array(2) {
    [0]=>
    string(1) "b"
    [1]=>
    int(2)
  }
  [2]=>
  array(2) {
    [0]=>
    string(1) "c"
    [1]=>
    int(3)
  }

https://3v4l.org/QWOJg

0 голосов
/ 12 сентября 2018

Это не менее многословно, но следующее позволит избежать написания цикла:

<?php
$types = ['a', 'b', 'c'];
$numbers = [1, 2, 3];
function map_them($k, $v)
{
    return array($k, $v);
}
$results = array_map('map_them', $types, $numbers);
print_r($results);

выход:

Array
(
    [0] => Array
        (
            [0] => a
            [1] => 1
        )

    [1] => Array
        (
            [0] => b
            [1] => 2
        )

    [2] => Array
        (
            [0] => c
            [1] => 3
        )

)
0 голосов
/ 12 сентября 2018

Если значения в $types уникальны, вы можете сделать это:

$combined = array_combine($types, $numbers);

Это даст:

[
    'a' => 1,
    'b' => 2,
    'c' => 3,
]

Который вы можете затем повторить с:

foreach ($combined as $type => $number)

Или просто:

foreach (array_combine($types, $numbers) as $type => $number)

Если значения в $types не являются уникальными, вы можете сделать это:

$combined = array_map(function($a, $b) { return [$a, $b]; }, $types, $numbers);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...