我有一个数据集,我想把它变成一个数组,我只是无法弄清楚如何...... 我已经尝试了一些像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,
)
我尝试了正则表达式,但这些数字的长度不同,这对我来说很难。
有没有人有想法?
答案 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
并使用位置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
)