0

以下の例に従って、値を持つテキストを含む変数があります。

$data = "5:7|4:1|504:2|1:3|"

そして、次のような結果を達成したいと思います。

$data[5] = 7;
$data[4] = 1;
$data[504] = 2;
$data[1] = 3;

私は爆発してみました:

$data = explode("|", $data);

//but it makes $data[0]="5:7"; $data[1]="4:1"; and so on.

もう一度爆発を使用する必要がありますか? それは意味がありますか、それとも別の方法がありますか?ヒントや助けを求めたいです。

4

5 に答える 5

4

もっと賢い方法があるかもしれませんが、私は次のようにします:

$data = array();
foreach (explode("|", $your_data) as $part)
{
    $pieces = explode(':', $part);
    // Assumes we have 2 pieces, might want to make sure here...

    $data[$pieces[0]] = $pieces[1];
}

また、このデータが何を表しているのかはわかりませんが、配列キーが互いに上書き1:1|1:2されるため、1 つの項目 (最後のピース) のみの配列になることに注意してください。別のアプローチを取る正当な理由があるかもしれません。

于 2012-07-13T11:01:06.253 に答える
1

確かに、explodeもう一度:

$data = "5:7|4:1|504:2|1:3";
$array = array();
foreach (explode('|', $data) as $pair) {
    list($id, $val) = explode(':', $pair);
    $array[$id] = $val;
}
于 2012-07-13T11:01:05.787 に答える
1

はい、このように爆発を 2 回使用する必要があります

$newData = array();
$pairs = explode('|',$data);
foreach($pairs as $pair){
   $tmp = explode(':',$pair);
   $newData[$tmp[0]] = $tmp[1];
}
于 2012-07-13T11:02:27.127 に答える
0

1行バージョン:

$data = array_map(function($d) { return (int)explode(":", $d)[1]; }, explode("|", $data));
于 2012-07-13T11:05:49.843 に答える
0

正規表現を使用してみてください:

$data = preg_split ("\||:", $data);
于 2012-07-13T11:03:21.757 に答える