kotcich
@kotcich

Как сделать нужного мне вида массив?

Есть массив вида:
array (6) {
[0]=>
  array(1) {
    [x]=>
    int 1
  }
[1]=>
  array(1) {
    [x]=>
    int 2
  }
[2]=>
  array(1) {
    [x]=>
    int 3
  }
[3]=>
  array(1) {
    [x]=>
    int 4
  }
[4]=>
  array(1) {
    [y]=>
    int 5
  }
[5]=>
  array(1) {
    [y]=>
    int 6
  }
}


Как из него сделать такой? :

array (2) {
[x]=>
  int 1
  int 2
  int 3
  int 4
;
 [y]=>
  int 5
  int 6
}
  • Вопрос задан
  • 61 просмотр
Пригласить эксперта
Ответы на вопрос 3
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Перебрать первый массив через for, foreаch или array_reduce и записать данные во второй массив.
Ответ написан
EnterSandman
@EnterSandman
Эникей
$array = array(
			array('x' => 1),
			array('x' => 2),
			array('x' => 3),
			array('x' => 4),
			array('y' => 5),
			array('y' => 6)
	);
foreach ($array as $arr)
{
	foreach($arr as $key=>$value)
	{
	    if($key == 'x')
	    {
	        $new_array['x'][] = $value;
	    } elseif ($key == 'y')
	    {
	        $new_array['y'][] = $value;
	    }
	    
	}
}

var_dump($new_array);
Ответ написан
<?php

$array = array(
      array('x' => 1),
      array('x' => 2),
      array('x' => 3),
      array('x' => 4),
      array('y' => 5),
      array('y' => 6),
      array('z' => 7), // Названия ключей не будут влиять на формирование результата ;-)
);

// Определим переменную с финальным результатом
$result = [];

// Прогуляемся по исходному массиву и добавим в результирующий массив
// значения исходного в разбивке по ключам

// * чтобы анонимная (безымянная) ф-ция могла получить доступ к переменной $result,
// добавим ее через слово `use`,
// а чтобы лямбда-функция (это то же, что анонимная) могла и изменять переменную $result,
// предварим ее амперсандом `&` — то есть передадим переменную по ссылке
array_walk($array, function($el) use (&$result) {
    // Найдем ключ для каждого элемента исходного массива
    $key = array_key_first($el);
    
    // Добавим вложенные значения в разбивке по ключам
    $result[$key][] = array_shift($el);
});

print_r($result);
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
LAPTOP.RU Москва
от 150 000 до 190 000 ₽
LAPTOP.RU Кострома
от 25 000 до 65 000 ₽
LAPTOP.RU Москва
от 130 000 до 170 000 ₽
07 мар. 2021, в 23:34
5000 руб./за проект
07 мар. 2021, в 23:14
10000 руб./за проект