PHP array_merge_recursive с использованием цикла foreach - PullRequest
0 голосов
/ 09 июля 2019

Я хочу объединить несколько массивов в новый массив, но сгруппировать их по одному значению ключа

Когда я использую этот цикл

foreach($mrh as $group){
    print_r($group);
};

Выход -

Array (
    [2] => 4
)
Array (
    [2] => 5
)
Array (
    [3] => 7
)
Array (
    [3] => 8
)
Array (
    [3] => 10
)

Мой желаемый результат -

array (
    [2] => array(
        [0] => 4,
        [1] => 5
    ),
    [3] => array(
        [0] => 7,
        [1] => 8,
        [2] => 10,
    )
)

array_merge_recursive() может быть полезно, но я не могу решить это с помощью foreach loop

Ответы [ 4 ]

1 голос
/ 09 июля 2019

Если ваш внутренний массив равен всегда для размера 1, вы можете использовать первый ключ массива как:

foreach($mrh as $e) {
    $k = array_key_first($e);
    $res[$k][] = $e[$k];
}

Пример в реальном времени: 3v4l

1 голос
/ 09 июля 2019

Просто зациклите массив, и с помощью внутреннего цикла обработайте внутренние элементы.Затем назначьте их в результирующий массив на основе их ключа.

$result = [];
foreach ($mrh as $group) {
    foreach ($group as $key=>$value) {
        // Declare the array if it does not exist, to avoid notices
        if (!isset($result[$key]))
            $result[$key] = [];

        // Append the value
        $result[$key][] = $value;
    }
}
0 голосов
/ 09 июля 2019

с использованием foreach

 $a = [
[2 => 4],
[2 => 5],
[3 => 7],
[3 => 8],
[3 => 10]
];
$r = [];
foreach($a as $k => $v){
  $_value = end($v);
  $r[key($v)][] = $_value;
}
echo '<pre>';
print_r($r);
0 голосов
/ 09 июля 2019
$mrh = [ [2=>4], [2=>5], [3=>7], [3=>8], [3=>10] ];
$newArray = [];

foreach($mrh as $group){ // loop over groups
  foreach($group as $key => $value) { // “loop over” group, to get access to key and value
    $newArray[$key][] = $value; // add value as a new element in the sub-array accessed by $key
  }
}
...