2

こんにちは、これに適したコードを教えていただけますか...

$split_getCreatedfield = explode(",", "3,1,2");

$fieldsWithValue = explode("~","1->Samuel Pulta~2->21~3->Male~");

for($row=0;$row<count(fieldsWithValue);$row++){

$data = explode("->", $fieldsWithValue[$row]);

}

このような出力が欲しい

3 = 3 = Male

2 = 2 = 21

1 = 1 = Samuel Pulta
4

2 に答える 2

0

私はむしろpreg_match_all()このように使用したいと思います:

$i = '3,2,1';
$s = '1->Samuel Pulta~2->21~3->Male~';

preg_match_all('/(\d+)->(.*?)(?:~|$)/', $s, $matches);

$fields = array_combine($matches[1], $matches[2]);

foreach (explode(',', $i) as $index) {
  if (isset($fields[$index])) {
    echo $index, ' = ', $index, ' = ', $fields[$index]. PHP_EOL;
  }
}

正規表現は次のような項目に一致1->Samuel Pultaし、数値をキーとして、その後に続くものを値として配列を作成します。

次に、必要なインデックスを繰り返し処理し、$fields配列から対応する値を出力します。

于 2013-02-19T10:02:02.350 に答える
0
<?php
$split_getCreatedfield  = explode(",", "3,1,2");
$fieldsWithValue        = explode("~","1->Samuel Pulta~2->21~3->Male~");

$result                 = array();
foreach($fieldsWithValue as $key => $val){
    if(trim($val) != ""){
        $res                = explode("->",$val);
        $res_key            = array_search($res[0],$split_getCreatedfield);
        $result[$key][]       = $split_getCreatedfield[$res_key];
        $result[$key][]       = $res[0];
        $result[$key][]       = $res[1];
    }
}
krsort($result); /// Not really required 
echo "<table>";
foreach($result as $vals){
echo "<tr><td>".$vals[0]."</td><td>=".$vals[1]."</td><td>=".$vals[2]."</td></tr>";
}
echo "</table>";

?>

出力:

3   =3  =Male
2   =2  =21
1   =1  =Samuel Pulta
于 2013-02-19T09:26:03.603 に答える