изменить формат массива php - PullRequest
0 голосов
/ 19 мая 2018

У меня есть массив, упомянутый ниже, у меня всегда будет значение, кратное 3.

$xyz = array(array('name'=>'abc'),array("name"=>"snds"),array("name"=>""),array("number"=>"452"),array("number"=>"845120"),array("number" => "84514513200"),array("email" => "ddddf"),array("email" => "dkskns"),array("email" => "kjnksdnkds"));

, но это неправильный формат для меня, чтобы выполнять дальнейшие операции, поэтому я хочу этот массив, как упомянуто ниже.

$abc = array(array("name"=>"abc","number"=>'452',"email" => "ddddf"),array("name" => "snds","number" =>"845120","email" => "dkskns"),array("name" => "", "number" => "84514513200","email" => "kjnksdnkds"));

примечание: длина массива динамическая, но она всегда будет кратна 3

Ответы [ 2 ]

0 голосов
/ 23 мая 2018

Это будет делать:

$result = array_map('array_merge', ...array_chunk($xyz, count($xyz) / 3));
0 голосов
/ 19 мая 2018

Одной из возможностей может быть использование оператора по модулю %.

В foreach значением является массив, и вы можете использовать array_keys дляполучить ключ и сбросить , чтобы получить значение первого элемента массива.

$result = [];
$count = 0;
foreach ($xyz as $value) {
    if ($count%3 === 0) {
        $count = 0;
    }
    $result[$count][array_keys($value)[0]] = reset($value);
    $count++;
}

Демо

Это даст вам:

array(3) {
  [0]=>
  array(3) {
    ["name"]=>
    string(3) "abc"
    ["number"]=>
    string(3) "452"
    ["email"]=>
    string(5) "ddddf"
  }
  [1]=>
  array(3) {
    ["name"]=>
    string(4) "snds"
    ["number"]=>
    string(6) "845120"
    ["email"]=>
    string(6) "dkskns"
  }
  [2]=>
  array(3) {
    ["name"]=>
    string(0) ""
    ["number"]=>
    string(11) "84514513200"
    ["email"]=>
    string(10) "kjnksdnkds"
  }
}
...