вложенный массив php - PullRequest
       6

вложенный массив php

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

У меня есть 3 разных массива

$partylist = ['party1','party2','party3'];
$position = ['position1','position2'];
$members= ['name1','name2','name3','name4','name5','name6'];

, и я хочу вложить $ position и $ member в значения каждого массива $ partylist, но $ position как ассоциативное имя и $ members как значение в phpсинтаксис.

array {
        party1 {
            array{
                position1 => name1
                position2 => name2
            }
        }
        party2 {
            array{
                position1 => name3
                position2 => name4
            }
        }
        party3 {
            array{
                position1 => name5
                position2 => name6
            }
        }
    }

Ответы [ 2 ]

0 голосов
/ 29 сентября 2018
<?php
$partylist = ['party1','party2','party3'];
$position = ['position1','position2'];
$members = ['name1','name2','name3','name4','name5','name6'];    

$out = [];
foreach ($members as $member) {
    if (!empty($out) && !next($position)) {
        reset($position);
        if(!next($partylist)) {
            die('Not enough parties.'.PHP_EOL);
        }
    }
    $out[current($partylist)][current($position)] = $member;
}
print_r($out);

https://3v4l.org/KoCQi

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

На основе ответа @Alive to Die, если вложить 2-е foreach(), вы можете динамически увеличивать / уменьшать номера своей партии, позиции или члена

//use count($position) to divide the members
$partymembers = array_chunk($members,count($position));

// create new array
$partyArray=[];

foreach($partylist as $key1 => $party){

  // create the party key
  $partyArray[$party] = [];

  foreach($position as $key2 => $p){

      // create the party position key and member
      $partyArray[$party][$p] = isset($partymembers[$key1][$key2]) ? $partymembers[$key1][$key2] : '';

  }

}

см. https://3v4l.org/fKj9X

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...