2012-07-16 64 views
0

我需要更改哪些代码? 回声仅仅是1个字母mphp foearch与数组

这是我的代码:

$string = '[email protected],123,12,1|[email protected],321,32,2'; 

$output = array(); 

foreach (explode('|', $string) as $key => $person) { 
    $output[] = array(
     'email' => $person[0], 
     'score' => $person[1], 
     'street' => $person[2], 
     'rank' => $person[3] 
    ); 
    echo $output[0]['email']; 
} 

OUTPUT:m

输出应该是:

$email1 = [email protected] 
$score1 = 123 
$street1 = 12 
$rank1 = 1 

$email2 = [email protected] 
$score2 = 321 
$street2 = 21 
$rank2 = 2 

是有可能做到这一点代码输出email1和email2? 是我的代码是否正确或需要更改某些内容?

谢谢。

+1

添加到菲尔整洁的解决方案,我建议你不要使用字符串这种方式。字符串从哪里来? – Adi 2012-07-16 06:45:15

+0

复制粘贴您的代码。输出是'mm'而不是'm'。 – 2012-07-16 07:53:48

回答

4

您需要使用嵌套循环;第一个遍历管道分隔的数据,第二个遍历逗号分隔的条目。这里

$string = '[email protected],123,12,1|[email protected],321,32,2'; 

$entries = explode('|', $string); 
foreach ($entries as $i => $entry) { 
    $parts = explode(',', $entry, 4); 
    if (count($parts) < 4) { 
     // not enough parts, throw an error or something 
    } 
    printf('$email%d = %s%s', $i+1, $parts[0], PHP_EOL); 
    printf('$score%d = %s%s', $i+1, $parts[1], PHP_EOL); 
    printf('$street%d = %s%s', $i+1, $parts[2], PHP_EOL); 
    printf('$rank%d = %s%s', $i+1, $parts[3], PHP_EOL); 
    echo PHP_EOL; 
} 

示例 - http://codepad.viper-7.com/82HbtT

+0

非常感谢你这个代码。 – user1506189 2012-07-16 08:31:50