PHP:解析多维数组中的数据



我有一个数组,它看起来像这样:

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

工作演示

相关内容

  • 没有找到相关文章

最新更新