Как я могу получить данные из массива, по 3 за раз? - PullRequest
1 голос
/ 06 октября 2010

Есть ли в PHP лучший способ получить доступ к этому массиву группами по три?

Допустим, мой массив представляет собой строку через запятую, например:

("Thora","Birch","Herself","Franklin Delano","Roosevelt","Himself (archive footage)","Martin Luther","King","Himself (archive footage) (uncredited)")

Хотя массив может заканчиватьсяБудучи намного больше, каждая из них будет отличаться, но все равно будет в логических группах по три (имя, фамилия, роль).

То, что я пытаюсь сделать, - это циклически проходить по массиву группами по три, так чтопервая запись будет иметь firstname[0]=>"Thora", lastname[0]=>"Birch" and role[0]=>"Herself".

Я привык только к foreach циклам, но не вижу дополнительных параметров, таких как «для каждых 3», так что, возможно, кто-то может пролить свет?

Ответы [ 4 ]

4 голосов
/ 06 октября 2010

PHP имеет функцию под названием array_chunk , предназначенную для этой задачи.

Попробуйте это:

$sets = array_chunk($people, 3);
foreach ($sets as $set) {
  //you could use the following line to put each field into a nice variable
  list ($firstname, $lastName, $role) = $set;

  //if all you want to do is collect the values, do this 
  $firstNames[] = $set[0];
  $lastNames[] = $set[1];
  $role[] = $set[2];
}

Обратите внимание, что последний кусок может иметь размер не 3,поэтому вам следует убедиться, что ключи 1 и 2 установлены в isset, если вы не можете гарантировать, что ваш массив всегда кратен 3 в длину.

2 голосов
/ 06 октября 2010

Вы можете использовать for -loop для этого, предполагая, что ваш массив 'people' имеет длину 3n.

$people = array("Thora","Birch","Herself","Franklin Delano","Roosevelt","Himself (archive footage)","Martin Luther","King","Himself (archive footage) (uncredited)");
$firstName = array();
$lastName = array();
$role = array();
for($i=0; $i<count($people); $i += 3){
   $firstName[] = $people[$i];
   $lastName[] = $people[$i+1];
   $role[] = $people[$i+2];
}
1 голос
/ 06 октября 2010

В качестве альтернативы, если вы используете PHP> = 5.3:

array_walk(
        range(1,9),//<== normally your array, range(1,9) is just an example/test value
        function($value,$key) use (&$return){
                 $return[$key % 3][] = $value;
        });
var_dump($return);
1 голос
/ 06 октября 2010

Как насчет псевдокода

for Index = 0 index = length index +=3
{
   Firstname= array[index]
   middlename = array[index+1]
   lastname = array[index+2]
   Do Something with them...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...