我有一个数组,它看起来像这样:
Array
(
[0] => Array
(
[0] => TE=140414100000 cd =AB1234 ggg =1234567 gbh =2
[7] => nd: DA1AAAAAAAAAA: TD = 140414:
)
[1] => Array
(
[0] => TE=140414100000 cd =AB1234 ggg =1234567 ghb =2
[7] => nd: DA1AAAAAAAAAA: TD = 140414:
)
)
我试图实现的是解析每个子数组中的数据,并用解析的数据创建一个新的多维数组。
示例:下面括号中的数据是应该在新的多维数组中返回的数据
Array
(
[0] => Array
(
[0] => te=(140414100000) cd =AB(1234) ggg =1234567 ghb =2
[7] => nd: DA(1)(AAAAAAAAAA): TD = (140414):
)
[1] => Array
(
[0] => te=(140414100000) cd =AB(1234) ggg =1234567 ghb =2
[7] => nd: DA(2)(BBBBBBBBBB): TD = (140414):
)
)
我想退货:
Array
(
[0] => Array
(
[0] => 140414100000
[1] => 1234
[2] => 1
[3] => AAAAAAAAAA
[4] => 140414
)
[1] => Array
(
[0] => 140414100000
[1] => 1234
[2] => 2
[3] => BBBBBBBBBB
[4] => 140414
)
).
所以我的问题是,什么是实现这一点的最佳方式?
这就是我想到的。然而,它的工作效率似乎非常低,因为它添加了许多必须清理的空数组。
foreach($new as $key => $val){
foreach($val as $res){
preg_match_all('%te=([0-9]{12})s%',$res,$matches);
$out[$key][] = $matches[1][0];
preg_match_all('%cds+=AB([0-9]{4})%',$res,$matches);
$out[$key][] = $matches[1][0];
preg_match_all('%nd:sDA([0-9]{1})%',$res,$matches);
$out[$key]['node'] = $matches[1][0];
preg_match_all('%nd:sDA[0-9]{1}([a-zA-Z]{10,14}):%',$res,$matches);
$out[$key]['rset'] = $matches[1][0];
preg_match_all('%tds=s([0-9]{6}):%',$res,$matches);
$out[$key]['trdt'] = $matches[1][0];
}
}
foreach($out as $v){
$v = array_values(array_filter($v));
$return[] = $v;
}
return $return;
提前谢谢。
更新时间:这起到了作用,而且效率高得多。感谢Shankar 的例子
foreach($new as $key => $val){
$v = implode('', $val);
preg_match_all("%te=([0-9]{12})|cds+=AB([0-9]{4})|nd:sDA([0-9]{1})|([A-Z]{3,7}):|td=s([0-9]{6}):%",$v,$matches);
$new_array[$key]['time'] = $matches[1][0];
$new_array[$key]['code'] = $matches[2][1];
$new_array[$key]['sp'] = $matches[3][2];
$new_array[$key]['rset'] = $matches[4][3];
$new_array[$key]['trfdt'] = $matches[5][4];
}
echo "<pre>";
print_r($new_array);
echo "</pre>";
循环遍历数组和implode
每个数组元素,并使用preg_match_all()
捕获(
和)
之间的所有条目,然后将这些匹配项传递给新数组。
foreach($arr as $k=>$arr1)
{
$v = implode('',$arr1);
preg_match_all('^((.*?))^', $v, $matches);
$new_arr[]=$matches[1];
}
print_r($new_arr);
工作演示