2017-11-08 15 views
0

私はデータセットを持っていて、それを配列に変換したいのですが、ちょっと考えていません... 私はregexとexplodeを使ってpreg_replace() ()しかし、私はそれが必要な方法で出ていません。PHPがデータペアで文字列を爆発

だから私のデータセットは、次のようになります。

dataCrossID=12345, DeviceID=[ID=1234567] 
dataCrossID=5678, DeviceID=[ID=7654321] 
dataCrossID=67899, DeviceID=[ID=87654321] 

と配列は次のようになります。

$dataSet(
      [12345] => 1234567, 
      [5678] => 7654321, 
      [67899] => 87654321, 
     ) 

を、私は正規表現を試みたが、番号が異なるlenghtsを得たという事実は、私にとって、それはハードになり。

アイデアはありますか?

+1

[ 'preg_match_all()'](http://php.net/manual/en/function.preg-match-all.phpは)ツールでありますあなたが必要です。 – axiac

+1

コードを表示すると私はあなたに私を見せます:-) – axiac

+0

@axiacこれは間違いなく私が探していた機能でした!あなたは私の日を救った!歓声のメイト:D – glenmyles

答えて

-1

使用preg_match_all()あなたが必要とするテキストの各部分を識別するために:

$input = <<< E 
dataCrossID=12345, DeviceID=[ID=1234567] 
dataCrossID=5678, DeviceID=[ID=7654321] 
dataCrossID=67899, DeviceID=[ID=87654321] 
E; 

preg_match_all('/dataCrossID=(\d+), DeviceID=\[ID=(\d+)\]/', $input, $matches, PREG_SET_ORDER); 
print_r($matches); 

$matchesの内容は次のとおりです。

Array 
(
    [0] => Array 
     (
      [0] => dataCrossID=12345, DeviceID=[ID=1234567] 
      [1] => 12345 
      [2] => 1234567 
     ) 
    [1] => Array 
     (
      [0] => dataCrossID=5678, DeviceID=[ID=7654321] 
      [1] => 5678 
      [2] => 7654321 
     ) 
    [2] => Array 
     (
      [0] => dataCrossID=67899, DeviceID=[ID=87654321] 
      [1] => 67899 
      [2] => 87654321 
     ) 
) 

あなたは今$matchesを反復処理すると位置での値を使用することができます1および2をキーと値として使用して、データを目的の配列に抽出します。

$output = array_reduce(
    $matches, 
    function(array $c, array $m) { 
     $c[$m[1]] = $m[2]; 
     return $c; 
    }, 
    array() 
); 
print_r($output); 

出力である:

Array 
(
    [12345] => 1234567 
    [5678] => 7654321 
    [67899] => 87654321 
) 
2

最も簡単な方法は、preg_match_allをシンプルな正規表現で使用することです。

$data = 'dataCrossID=12345, DeviceID=[ID=1234567] 
dataCrossID=5678, DeviceID=[ID=7654321] 
dataCrossID=67899, DeviceID=[ID=87654321]'; 

preg_match_all('/=([0-9]+).*=([0-9]+)/', $data, $matches, PREG_SET_ORDER); 
$dataSet = []; 
foreach ($matches as $match) { 
    $dataSet[$match[1]] = $match[2]; 
} 

print_r($dataSet); 
+0

恐ろしい! @axiacのおかげで、私が探していた機能が得られましたが、私が作成したものよりも正規表現の方に感謝しなければなりません。 – glenmyles