Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/254.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP将格式化字符串(标题和值)转换为多维数组_Php_Arrays_Multidimensional Array - Fatal编程技术网

PHP将格式化字符串(标题和值)转换为多维数组

PHP将格式化字符串(标题和值)转换为多维数组,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我想将此格式化字符串转换为多维数组,但我无法实现 目标是提取标题头(Dreg Time、FN、SS_ID、MAC、扇区ID、类型、原因、CMPNT、Basic、Cid)并关联相应的值 因为最后,我需要处理“原因”列中的数据 字符串: $log = ": mss get dereg_log 2 500 ---------- MODEM 2 MAC --------- Dreg Time FN SS_ID MAC

我想将此格式化字符串转换为多维数组,但我无法实现

目标是提取标题头(Dreg Time、FN、SS_ID、MAC、扇区ID、类型、原因、CMPNT、Basic、Cid)并关联相应的值

因为最后,我需要处理“原因”列中的数据

字符串:

$log = ": mss get dereg_log 2 500



---------- MODEM 2 MAC ---------



Dreg Time                   FN       SS_ID     MAC           Sector ID Type Reason CMPNT Basic Cid

2017/08/29 08:20:39:627   0x4da9f0  8277 00:24:a0:xx:xx:xx         1    2     25     0        86

2017/08/29 07:17:33:478   0x421c02  8238 00:23:a2:xx:xx:xx         1    3     59     0        47

2017/08/29 06:00:43:232   0x340a41  8508 00:23:a2:xx:xx:xx         1    1      6    13       317



Total Deregistrations since sector active in sector 1: 9576

Derigistrations since dreg log last reset in sector 1: 9576



Deregistration Types:

    DEREG_MSS_IMMEDIATE = 0

    DEREG_MSS_DREG_REQ_FROM_AP = 1

    DEREG_MSS_DREG_REQ_FROM_MS = 2

    DEREG_MSS_RNG_RSP_ABORT_FROM_AP = 3

    DEREG_MSS_CONTACT_LOST = 4



---------------------------------

2017-Aug-29 08:31:53.860";
Array
(
    [0] => Array
        (
            [Dreg Time] => '2017/08/29 08:20:39:627'
            [FN] => '0x4da9f0'
            [SS_ID] => '8277'
            [MAC] => '00:24:a0:xx:xx:xx'
            [Sector ID] => '1'
            [Type] => '2'
            [Reason] => '25'
            [CMPNT] => '0'
            [Basic Cid] => '86'
        )

    [1] => Array
        (
            [Dreg Time] => '2017/08/29 07:17:33:478'
            [FN] => '0x421c02'
            [SS_ID] => '8238'
            [MAC] => '00:23:a2:xx:xx:xx'
            [Sector ID] => '1'
            [Type] => '3'
            [Reason] => '59'
            [CMPNT] => '0'
            [Basic Cid] => '47'
        )

    [2] => Array
        (
            [Dreg Time] => '2017/08/29 06:00:43:232'
            [FN] => '0x340a41'
            [SS_ID] => '8508'
            [MAC] => '00:23:a2:xx:xx:xx'
            [Sector ID] => '1'
            [Type] => '1'
            [Reason] => '6'
            [CMPNT] => '13'
            [Basic Cid] => '317'
        )
)
echo '<pre>';
// remove blank lines
$log = preg_replace("/(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+/", "\n", $log);
// remove new lines
$log = preg_replace('/^.+\n.+\n/', '', $log);

$lines = explode( "\n\n", $log );
$return = array();

foreach ($lines as $line) {
  $items = explode("\n", $line);
  $return[array_shift($items)] = $items;
}

print_r($return);
$log = preg_replace("/(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+/", "\n", $log);
$lines = explode( "\n", $log );
$return = array();

foreach ($lines as $line) {
  $line = preg_replace("/\s+/", " ", $line); //condense and standardise the whitespace between each item, so that explode can work.
  $items = explode(" ", $line);
  if (count($items) == 10 && preg_match("/^[0-9]{4}/", $items[0])) //restrict to lines starting with the year, and with the correct number of columns
      $return[] = array(
            "Dreg Time" => $items[0]." ".$items[1],
            "FN" => $items[2],
            "SS_ID" => $items[3],
            "MAC" => $items[4],
            "Sector_ID" => $items[5],
            "Type" => $items[6],
            "Reason" => $items[7],
            "CMPNT" => $items[8],
            "Basic_Cid" => $items[9]
      );
}

 echo "<pre>".var_export($return, true)."</pre>";
所需阵列:

$log = ": mss get dereg_log 2 500



---------- MODEM 2 MAC ---------



Dreg Time                   FN       SS_ID     MAC           Sector ID Type Reason CMPNT Basic Cid

2017/08/29 08:20:39:627   0x4da9f0  8277 00:24:a0:xx:xx:xx         1    2     25     0        86

2017/08/29 07:17:33:478   0x421c02  8238 00:23:a2:xx:xx:xx         1    3     59     0        47

2017/08/29 06:00:43:232   0x340a41  8508 00:23:a2:xx:xx:xx         1    1      6    13       317



Total Deregistrations since sector active in sector 1: 9576

Derigistrations since dreg log last reset in sector 1: 9576



Deregistration Types:

    DEREG_MSS_IMMEDIATE = 0

    DEREG_MSS_DREG_REQ_FROM_AP = 1

    DEREG_MSS_DREG_REQ_FROM_MS = 2

    DEREG_MSS_RNG_RSP_ABORT_FROM_AP = 3

    DEREG_MSS_CONTACT_LOST = 4



---------------------------------

2017-Aug-29 08:31:53.860";
Array
(
    [0] => Array
        (
            [Dreg Time] => '2017/08/29 08:20:39:627'
            [FN] => '0x4da9f0'
            [SS_ID] => '8277'
            [MAC] => '00:24:a0:xx:xx:xx'
            [Sector ID] => '1'
            [Type] => '2'
            [Reason] => '25'
            [CMPNT] => '0'
            [Basic Cid] => '86'
        )

    [1] => Array
        (
            [Dreg Time] => '2017/08/29 07:17:33:478'
            [FN] => '0x421c02'
            [SS_ID] => '8238'
            [MAC] => '00:23:a2:xx:xx:xx'
            [Sector ID] => '1'
            [Type] => '3'
            [Reason] => '59'
            [CMPNT] => '0'
            [Basic Cid] => '47'
        )

    [2] => Array
        (
            [Dreg Time] => '2017/08/29 06:00:43:232'
            [FN] => '0x340a41'
            [SS_ID] => '8508'
            [MAC] => '00:23:a2:xx:xx:xx'
            [Sector ID] => '1'
            [Type] => '1'
            [Reason] => '6'
            [CMPNT] => '13'
            [Basic Cid] => '317'
        )
)
echo '<pre>';
// remove blank lines
$log = preg_replace("/(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+/", "\n", $log);
// remove new lines
$log = preg_replace('/^.+\n.+\n/', '', $log);

$lines = explode( "\n\n", $log );
$return = array();

foreach ($lines as $line) {
  $items = explode("\n", $line);
  $return[array_shift($items)] = $items;
}

print_r($return);
$log = preg_replace("/(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+/", "\n", $log);
$lines = explode( "\n", $log );
$return = array();

foreach ($lines as $line) {
  $line = preg_replace("/\s+/", " ", $line); //condense and standardise the whitespace between each item, so that explode can work.
  $items = explode(" ", $line);
  if (count($items) == 10 && preg_match("/^[0-9]{4}/", $items[0])) //restrict to lines starting with the year, and with the correct number of columns
      $return[] = array(
            "Dreg Time" => $items[0]." ".$items[1],
            "FN" => $items[2],
            "SS_ID" => $items[3],
            "MAC" => $items[4],
            "Sector_ID" => $items[5],
            "Type" => $items[6],
            "Reason" => $items[7],
            "CMPNT" => $items[8],
            "Basic_Cid" => $items[9]
      );
}

 echo "<pre>".var_export($return, true)."</pre>";
已尝试代码:

$log = ": mss get dereg_log 2 500



---------- MODEM 2 MAC ---------



Dreg Time                   FN       SS_ID     MAC           Sector ID Type Reason CMPNT Basic Cid

2017/08/29 08:20:39:627   0x4da9f0  8277 00:24:a0:xx:xx:xx         1    2     25     0        86

2017/08/29 07:17:33:478   0x421c02  8238 00:23:a2:xx:xx:xx         1    3     59     0        47

2017/08/29 06:00:43:232   0x340a41  8508 00:23:a2:xx:xx:xx         1    1      6    13       317



Total Deregistrations since sector active in sector 1: 9576

Derigistrations since dreg log last reset in sector 1: 9576



Deregistration Types:

    DEREG_MSS_IMMEDIATE = 0

    DEREG_MSS_DREG_REQ_FROM_AP = 1

    DEREG_MSS_DREG_REQ_FROM_MS = 2

    DEREG_MSS_RNG_RSP_ABORT_FROM_AP = 3

    DEREG_MSS_CONTACT_LOST = 4



---------------------------------

2017-Aug-29 08:31:53.860";
Array
(
    [0] => Array
        (
            [Dreg Time] => '2017/08/29 08:20:39:627'
            [FN] => '0x4da9f0'
            [SS_ID] => '8277'
            [MAC] => '00:24:a0:xx:xx:xx'
            [Sector ID] => '1'
            [Type] => '2'
            [Reason] => '25'
            [CMPNT] => '0'
            [Basic Cid] => '86'
        )

    [1] => Array
        (
            [Dreg Time] => '2017/08/29 07:17:33:478'
            [FN] => '0x421c02'
            [SS_ID] => '8238'
            [MAC] => '00:23:a2:xx:xx:xx'
            [Sector ID] => '1'
            [Type] => '3'
            [Reason] => '59'
            [CMPNT] => '0'
            [Basic Cid] => '47'
        )

    [2] => Array
        (
            [Dreg Time] => '2017/08/29 06:00:43:232'
            [FN] => '0x340a41'
            [SS_ID] => '8508'
            [MAC] => '00:23:a2:xx:xx:xx'
            [Sector ID] => '1'
            [Type] => '1'
            [Reason] => '6'
            [CMPNT] => '13'
            [Basic Cid] => '317'
        )
)
echo '<pre>';
// remove blank lines
$log = preg_replace("/(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+/", "\n", $log);
// remove new lines
$log = preg_replace('/^.+\n.+\n/', '', $log);

$lines = explode( "\n\n", $log );
$return = array();

foreach ($lines as $line) {
  $items = explode("\n", $line);
  $return[array_shift($items)] = $items;
}

print_r($return);
$log = preg_replace("/(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+/", "\n", $log);
$lines = explode( "\n", $log );
$return = array();

foreach ($lines as $line) {
  $line = preg_replace("/\s+/", " ", $line); //condense and standardise the whitespace between each item, so that explode can work.
  $items = explode(" ", $line);
  if (count($items) == 10 && preg_match("/^[0-9]{4}/", $items[0])) //restrict to lines starting with the year, and with the correct number of columns
      $return[] = array(
            "Dreg Time" => $items[0]." ".$items[1],
            "FN" => $items[2],
            "SS_ID" => $items[3],
            "MAC" => $items[4],
            "Sector_ID" => $items[5],
            "Type" => $items[6],
            "Reason" => $items[7],
            "CMPNT" => $items[8],
            "Basic_Cid" => $items[9]
      );
}

 echo "<pre>".var_export($return, true)."</pre>";

您的代码是一个不完整的尝试,并且包含一些错误-例如,您从日志中删除了换行符,然后尝试根据换行符拆分字符串!然后,您尝试用换行符拆分一行,但显然一行不能包含换行符。此外,代码只是简单地遍历每一行,并将其直接添加到数组中,而不是在每个索引中创建关联数组,如所需的输出所示。最后,它没有尝试识别哪些行实际上包含所需的输出

这可以做到:

$log=preg\u replace(“/(^[\r\n]*.[\r\n]+)[\s\t]*[\r\n]+/”,“\n”,$log);
$lines=explode(“\n”,$log);
$return=array();
foreach($line作为$line){
$line=preg_replace(“/\s+/”,“”,$line);//压缩并标准化每个项目之间的空白,以便explode可以工作。
$items=分解(“,$line”);
如果(count($items)==10&&preg_match(“/^[0-9]{4}/”,$items[0])//限制为从年份开始的行,并且列数正确
$return[]=数组(
“渣滓时间”=>$items[0]。“.$items[1],
“FN”=>$items[2],
“SS_ID”=>$items[3],
“MAC”=>$items[4],
“扇区ID”=>$items[5],
“类型”=>$items[6],
“原因”=>$items[7],
“CMPNT”=>$items[8],
“基本Cid”=>$items[9]
);
}
echo“.var_导出($return,true)。”;

您尝试了什么
?请定义“无法管理”。我尝试了以下代码:echo“”$log=preg\u replace(“/(^[\r\n]*.[\r\n]+)[\s\t]*[\r\n]+/”,“\n”,$log)$log=preg_replace('/^.+\n.+\n.+\n.+\n.+\n.+\n.+\n.+\n/','',$log)$行=分解(“\n\n”,$log)$return=array();foreach($line作为$line的行){$items=explode(“\n”,$line);$return[array\u shift($items)]=$items;}print\u r($return);请编辑您的问题,并在问题中添加您已添加的代码,说明您尝试过它,以及为什么它不起作用。谢谢。你的尝试有什么收获?干得好,伙计!谢谢你给我指出了正确的方向。你的解释更清楚了。我从你的代码中学到:)