Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.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,我可能完全错了,但我想我应该先在这里提出这个问题。我有一个从Windows进程(RoboCopy)生成的日志文件,然后通过PHP打开该文件,并为日志的每一行创建一个数组。然后,我对数组进行过滤,只提取出我需要的行: [0] => Started : 25 June 2015 13:12:48 [1] => 2015/06/25 13:13:46 ERROR 53 (0x00000035) Getting File System Type of Destination \\test-l

我可能完全错了,但我想我应该先在这里提出这个问题。我有一个从Windows进程(RoboCopy)生成的日志文件,然后通过PHP打开该文件,并为日志的每一行创建一个数组。然后,我对数组进行过滤,只提取出我需要的行:

[0] => Started : 25 June 2015 13:12:48
[1] => 2015/06/25 13:13:46 ERROR 53 (0x00000035) Getting File System Type of Destination \\test-lap\e$\test\
[2] => 2015/06/25 13:13:46 ERROR 53 (0x00000035) Accessing Destination Directory \\test-lap\e$\test\
[3] => modified        4.7 m    2015-Map.pdf
[4] => modified        2.6 m    B7x0_ES71x0_PCL6_x86_ENU_2201_tcm3-154780.exe
[5] => modified        2.6 m    B7x0_ES71x0_PCL_x86_ENU_2201_tcm3-154696.exe
[6] => modified        2.7 m    B7x0_ES71x0_PS_x86_ENU_2201_tcm3-154863.exe
[7] => modified       45.7 m    V22.01.07.zip
[8] => modified       14.8 m    Chipset_Driver_H1VVY_WN_6.2.8400.39034_A03.EXE
[9] => modified       21.3 m    Chipset_Driver_M6X6G_WN_3.0.0.16_A00.EXE
[10] => modified            1100    cpaddin_example.ini
[11] => modified            1391    ddict.txt
[12] => modified           1.2 m    desktop.jpg
[13] => modified           5.0 m    EPS_uninstall_tool.exe
[14] => modified          741819    Install.log
[15] => modified          15.0 m    Network_Driver_64ND2_WN_7.80.218.2014_A00.EXE
[16] => modified            8746    New Microsoft Excel Worksheet.xlsx
[17] => modified               0    New Microsoft Visio Drawing.vsd
[18] => modified               0    New Microsoft Word Document (2).docx
[19] => modified               0    New Microsoft Word Document (3).docx
[20] => modified               0    New Microsoft Word Document.docx
[21] => modified               0    New Text Document.txt
[22] => modified           1.8 m    OkiC5x50_ES2x32a4PCLx64GB_tcm3-37365.exe
[23] => modified           1.8 m    OkiC5x50_ES2x32a4PCLx86GB_tcm3-37451.exe
[24] => Newer              9.8 m    OKW3E04V101_tcm3-155664.exe
[25] => 0.0%
[26] => 2015/06/25 13:18:22 ERROR 53 (0x00000035) Copying File c:\test\OKW3E04V101_tcm3-155664.exe
[27] => Newer              9.8 m    OKW3E04V101_tcm3-155664.exe
[28] => 2015/06/25 13:22:00 ERROR 53 (0x00000035) Copying File c:\test\OKW3E04V101_tcm3-155664.exe
[29] => Newer              9.8 m    OKW3E04V101_tcm3-155664.exe
[30] => 0.0%
[31] => 10.1%
[32] => 20.3%
[33] => 30.5%
[34] => 40.6%
[35] => 50.8%
[36] => 61.0%
[37] => 71.1%
[38] => 81.3%
[39] => 91.5%
[40] => 100%
[41] => 100%
[42] => 100%
[43] => New File           1.6 m    PSTools.zip 13:37 -> 13:41
[44] => 0%
[45] => 2015/06/25 13:45:17 ERROR 121 (0x00000079) Copying File c:\test\PSTools.zip
[46] => New File           1.6 m    PSTools.zip 13:45 -> 13:50
[47] => 0%
[48] => 15%
[49] => 31%
[50] => 46%
[51] => 62%
[52] => 77%
[53] => 93%
[54] => 99%
[55] => 99%
[56] => 100%
从这里开始,我试图做的是,每当显示一个百分比时,我想取消设置该元素,并将其作为一个单独的数组附加到前一个元素。因此,对于报告的每个文件,我都会得出类似的结论:

[0] => Started : 25 June 2015 13:12:48
[1] => 2015/06/25 13:13:46 ERROR 53 (0x00000035) Getting File System Type of Destination \\test-laptop\e$\test\
[2] => 2015/06/25 13:13:46 ERROR 53 (0x00000035) Accessing Destination Directory \\test-laptop\e$\test\
[3] => modified        4.7 m    2015-Map.pdf
[4] => modified        2.6 m    B7x0_ES71x0_PCL6_x86_ENU_2201_tcm3-154780.exe
[5] => modified        2.6 m    B7x0_ES71x0_PCL_x86_ENU_2201_tcm3-154696.exe
[6] => modified        2.7 m    B7x0_ES71x0_PS_x86_ENU_2201_tcm3-154863.exe
[7] => modified       45.7 m    V22.01.07.zip
[8] => modified       14.8 m    Chipset_Driver_H1VVY_WN_6.2.8400.39034_A03.EXE
[9] => modified       21.3 m    Chipset_Driver_M6X6G_WN_3.0.0.16_A00.EXE
[10] => modified            1100    cpaddin_example.ini
[11] => modified            1391    ddict.txt
[12] => modified           1.2 m    desktop.jpg
[13] => modified           5.0 m    EPS_uninstall_tool.exe
[14] => modified          741819    Install.log
[15] => modified          15.0 m    Network_Driver_64ND2_WN_7.80.218.2014_A00.EXE
[16] => modified            8746    New Microsoft Excel Worksheet.xlsx
[17] => modified               0    New Microsoft Visio Drawing.vsd
[18] => modified               0    New Microsoft Word Document (2).docx
[19] => modified               0    New Microsoft Word Document (3).docx
[20] => modified               0    New Microsoft Word Document.docx
[21] => modified               0    New Text Document.txt
[22] => modified           1.8 m    OkiC5x50_ES2x32a4PCLx64GB_tcm3-37365.exe
[23] => modified           1.8 m    OkiC5x50_ES2x32a4PCLx86GB_tcm3-37451.exe
[24] => Array
    [0] Newer              9.8 m    OKW3E04V101_tcm3-155664.exe
    [1] => 0.0%
[25] => 2015/06/25 13:18:22 ERROR 53 (0x00000035) Copying File c:\test\OKW3E04V101_tcm3-155664.exe
[26] => Newer              9.8 m    OKW3E04V101_tcm3-155664.exe
[27] => 2015/06/25 13:22:00 ERROR 53 (0x00000035) Copying File c:\test\OKW3E04V101_tcm3-155664.exe
[28] => Array
    [0] => Newer               9.8 m    OKW3E04V101_tcm3-155664.exe
    [1] => 0.0%
    [2] => 10.1%
    [3] => 20.3%
    [4] => 30.5%
    [5] => 40.6%
    [6] => 50.8%
    [7] => 61.0%
    [8] => 71.1%
    [9] => 81.3%
    [10] => 91.5%
    [11] => 100%
    [12] => 100%
    [13] => 100%
[29] => Array
    [0] New File           1.6 m    PSTools.zip 13:37 -> 13:41
    [1] => 0.0%
[30] => 2015/06/25 13:45:17 ERROR 121 (0x00000079) Copying File c:\test\PSTools.zip
[31] => Array
    [0] => New File            1.6 m    PSTools.zip 13:45 -> 13:50
    [1] => 0.0%
    [2] => 15%
    [3] => 31%
    [4] => 46%
    [5] => 62%
    [6] => 77%
    [7] => 93%
    [8] => 99%
    [9] => 99%
    [10] => 100%
当然,如果有超过一个百分比,我想把它推到新数组的末尾,这样它就有了它的发展历史。然后移动到日志中的下一个文件

我想知道是否有人对实现这一目标的最佳方法有任何想法?如果可能的话

编辑:我应该补充一点,我已经有了一个函数,它将给我数组键,其中包含%的值,它将返回一个布尔值是或否。这是数据的移动,我无法理解


edit2:我意识到如果没有文件名,子数组就没有意义。所以我修改了我想要的输出。

我想我已经找到了解决方案,它生成了一个我可以使用的数组。为了至少填写那些可能正在寻找类似信息的信息,我使用了以下代码:

function strposa($haystack, $needles=array(), $offset=0){
    foreach($needles as $needle) {
        if (strpos($haystack, $needle) !== false) {
            return true;
        }
    }
    return false;
}


$modlog = array();
$addlog = array();
$x = 0;
reset($log);
while($x < count($log)){
    if(strposa(current($log), array("modified", "Newer", "New File")) !== false){
        $addlog["file"] = current($log);

        $x++;
        next($log);

        while(strposa(current($log), array("%", "ERROR")) !== false){
            $addlog[] = current($log);

            $x++;
            next($log);
        }

        $modlog[] = $addlog;
        unset($addlog); 
    }else{
        $modlog[] = current($log);
        $x++;
        next($log);
    }
}

可能有更好的解决办法,但似乎对我有效。如果有人有任何建议,请告诉我。

是的,当然有可能。警告:小心从使用foreach处理的阵列中删除Occ。使用数组的副本对其进行修改
[24] => Array
    (
        [file] => Newer                9.8 m    OKW3E04V101_tcm3-155664.exe
        [0] => 0.0%
        [1] => 2015/06/25 13:18:22 ERROR 53 (0x00000035) Copying File c:\test\OKW3E04V101_tcm3-155664.exe
    )

[25] => Array
    (
        [file] => Newer                9.8 m    OKW3E04V101_tcm3-155664.exe
        [0] => 2015/06/25 13:22:00 ERROR 53 (0x00000035) Copying File c:\test\OKW3E04V101_tcm3-155664.exe
    )

[26] => Array
    (
        [file] => Newer                9.8 m    OKW3E04V101_tcm3-155664.exe
        [0] => 0.0%
        [1] => 10.1%
        [2] => 20.3%
        [3] => 30.5%
        [4] => 40.6%
        [5] => 50.8%
        [6] => 61.0%
        [7] => 71.1%
        [8] => 81.3%
        [9] => 91.5%
        [10] => 100%
        [11] => 100%
        [12] => 100%
    )

[27] => Array
    (
        [file] => New File             1.6 m    PSTools.zip 13:37 -> 13:41
        [0] => 0%
        [1] => 2015/06/25 13:45:17 ERROR 121 (0x00000079) Copying File c:\test\PSTools.zip
    )

[28] => Array
    (
        [file] => New File             1.6 m    PSTools.zip 13:45 -> 13:50
        [0] => 0%
        [1] => 15%
        [2] => 31%
        [3] => 46%
        [4] => 62%
        [5] => 77%
        [6] => 93%
        [7] => 99%
        [8] => 99%
        [9] => 100%
    )