0

コードの何を変更する必要がありますか? エコーはたったの1文字m

これは私のコードです:

$string = 'mars@email.com,123,12,1|art@hur.com,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']; 
}

出力:m

出力は次のようになります。

$email1  = mars@email.com
$score1  = 123
$street1 = 12
$rank1   = 1

$email2  = art@hur.com
$score2  = 321
$street2 = 21
$rank2   = 2

このコードを実行して email1 と email2 を出力することは可能ですか? 私のコードは正しいですか、それとも何かを変更する必要がありますか?

ありがとうございました。

4

1 に答える 1

4

ネストされたループを使用する必要があります。1 番目はパイプ区切りのデータを反復処理し、2 番目はカンマ区切りのエントリを反復処理します。

$string = 'mars@email.com,123,12,1|art@hur.com,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

于 2012-07-16T06:42:48.190 に答える