0

以下は、連絡先情報を保持する文字列です。この文字列は動的です。つまり、新しいフィールドが追加される場合があります。たとえば、携帯電話番号が追加されたり、古いフィールドが削除されたりする場合があります。

                              <?php $str = 
                                "tel: (123) 123-4567
                                fax : (234) 127-1234
                                email : abc@a.a";
                                $newStr =  explode(':', $str);
                                echo '<pre>'; print_r($newStr); 
                              ?>

コードの出力は次のとおりです。

                        Array
                            (
                                [0] => tel
                                [1] =>  (123) 123-4567
                                                                fax 
                                [2] =>  (234) 127-1234
                                                                email 
                                [3] =>  abc@a.a
                            )

ただし、必要な出力は次の形式です。

                        Array
                            (
                                [tel] => (123) 123-4567
                                [fax] =>  (234) 127-1234            
                                [email] =>  abc@a.a
                            )

私はそれをいくつかの方法で爆発させようとしました...しかしうまくいきませんでした。ご案内ください。

4

6 に答える 6

6
$txt = 
                            "tel: (123) 123-4567
                            fax : (234) 127-1234
                            email : abc@a.a";
$arr = array();
$lines = explode("\n",$txt);
foreach($lines as $line){
    $keys = explode(":",$line);
    $key = trim($keys[0]);
    $item = trim($keys[1]);
    $arr[$key] = $item;
}
print_r($arr);

CodePade

于 2012-12-11T06:48:37.800 に答える
2

正規表現を使用した短い方法を次に示します。

preg_match_all('/(\w+)\s*:\s*(.*)/', $str, $matches);
$newStr = array_combine($matches[1], $matches[2]);

print_r($newStr);

結果:

Array
(
    [tel] => (123) 123-4567
    [fax] => (234) 127-1234
    [email] => abc@a.a
)

ここの例

ただし、この例では、指定された文字列のように各データペアが別々の行にあり、「キー」にスペースが含まれていないことを前提としています。

于 2012-12-11T07:01:41.973 に答える
0

区切り文字「:」および「\ n」(改行文字)でpreg_splitを使用します。

$newStr = preg_split("\n|:", $str);
于 2012-12-11T06:53:23.397 に答える
0
foreach( $newStr as $key=>$value){
      echo $key;
      echo $value;
} 
于 2012-12-11T06:47:56.607 に答える
0
<?php
    $str = 
    "tel: (123) 123-4567
    fax : (234) 127-1234
    email : abc@a.a";

$contacts = array();
$rows = explode("\n", $str);
foreach($rows as $row) {
    list($type, $val) = explode(':', $row);
    $contacts[trim($type)] = trim($val);
}
var_export($contacts);

戻り値

array (
  'tel' => '(123) 123-4567',
  'fax' => '(234) 127-1234',
  'email' => 'abc@a.a',
)
于 2012-12-11T06:50:36.677 に答える
0
$str =
    "tel: (123) 123-4567
    fax : (234) 127-1234
    email : abc@a.a";

$array = array();
foreach (preg_split('~([\r]?[\n])~', $str) as $row)
{
    $rowItems = explode(':', $row);
    if (count($rowItems) === 2)
        $array[trim($rowItems[0])] = trim($rowItems[1]);
}

システムごとに行末が異なる可能性があるため、preg_splitを使用する必要があります。文字列が無効である可能性もあるので、それを処理する必要があります(foreachサイクルの条件)

于 2012-12-11T07:00:36.890 に答える