2010-10-06 69 views
1

有没有更好的方式在PHP中以三个一组的方式访问此数组?如何从数组中检索数据,每次3个?

比方说,我的阵列是用逗号分隔的字符串,如:

("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”,也许有人可以摆脱一些光线?

+0

你必须使用()步骤3,我不知道,直接做的任何功能。 – MatTheCat 2010-10-06 14:29:10

回答

4

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的倍数。

+0

请确保以块大小调用array_chunk:array_chunk($ people,3) – 2010-10-06 14:58:39

+0

糟糕 - 谢谢! – 2010-10-06 14:59:34

+0

这是我没有听说过的,谢谢你的帮助!我将在明天让这个运行,看起来不错,优雅! – Chris 2010-10-07 06:31:49

2

为此,您可以使用for -loop,假设您的'人员'数组的长度为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

约 伪代码

for Index = 0 index = length index +=3 
{ 
    Firstname= array[index] 
    middlename = array[index+1] 
    lastname = array[index+2] 
    Do Something with them... 
} 
+0

我不是一个PHP程序员,但我无法想象这不是完全按照要求提供的。 – 2010-10-07 00:42:50

1

另外,如果你使用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);