PHP使用数据对爆炸String

时间:2017-11-08 16:25:43

标签: php arrays regex

我有一个数据集,我想把它变成一个数组,我只是无法弄清楚如何...... 我已经尝试了一些像preg_replace()和regex以及explode()这样的东西,但它并没有像我需要的那样出现。

所以我的数据集看起来像这样:

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

并且数组应该如下所示:

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

我尝试了正则表达式,但这些数字的长度不同,这对我来说很难。

有没有人有想法?

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:-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并使用位置12的值作为键和值,将数据提取到所需的数组中:

$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
)