Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.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_Parsing - Fatal编程技术网

在PHP中,如何将这个简单的文本块解析为多维数组?

在PHP中,如何将这个简单的文本块解析为多维数组?,php,arrays,parsing,Php,Arrays,Parsing,我有一个简单的文本块;其内容是: txt_1(val_1,val_2,val_3). txt_1(val_4,val_5,val_6). txt_2(val_7,val_8,val_9). txt_3(val_10,val_11,val_12). txt_3(val_13,val_14,val_15). txt_4(val_16,val_17,val_18). 现在,我想解析到这个PHP数组中,比如: Array ( [txt_1] => A

我有一个简单的文本块;其内容是:

txt_1(val_1,val_2,val_3). txt_1(val_4,val_5,val_6). txt_2(val_7,val_8,val_9). txt_3(val_10,val_11,val_12). txt_3(val_13,val_14,val_15). txt_4(val_16,val_17,val_18). 现在,我想解析到这个PHP数组中,比如:

Array
(
    [txt_1] => Array
        (
            [0] => Array
                (
                    [0] => val_1
                    [1] => val_2
                    [2] => val_3
                )

            [1] => Array
                (
                    [0] => val_4
                    [1] => val_5
                    [2] => val_6
                )

        )

    [txt_2] => Array
        (
            [0] => Array
                (
                    [0] => val_7
                    [1] => val_8
                    [2] => val_9
                )

        )

    [txt_3] => Array
        (
            [0] => Array
                (
                    [0] => val_10
                    [1] => val_11
                    [2] => val_12
                )

            [1] => Array
                (
                    [0] => val_13
                    [1] => val_14
                    [2] => val_15
                )

        )

    [txt_4] => Array
        (
            [0] => Array
                (
                    [0] => val_16
                    [1] => val_17
                    [2] => val_18
                )

        )

)
所有数据均为一般数据。你能帮我用PHP完成吗?

在这里测试它:

<?php

// Initially put your input into a variable
$txt=<<<__EOT__
txt_1(val_1,val_2,val_3).
txt_2(val_4,val_5,val_6).
txt_n(val_a,val_b,val_c).
__EOT__;

$result = array();

// separate out each row
$rows = explode("\n", $txt);

    // loop through each row
    foreach($rows as $row) {

    // Use a regular expression to find the key and values
    $success = preg_match('/^([^(]+)\(([^)]+)\)\.$/', $row, $parts);

    // Check the regexp worked
    if(!$success) {
        echo 'Failed to match row: ' . $row . "\n";
        continue;
    }

    // get the array key from the regexp results
    $key = $parts[1];

    // the values are all a string, split on the comma to make an array
    $values = explode(',', $parts[2]);

    // store $key and $values in the result
    $result[$key] = $values;

}

// See if it worked
var_dump($result);
注意:要使用短数组语法[],请使用PHP5.4

<?php

$text = " 
        txt_1(val_1,val_2,val_3).
        txt_2(val_4,val_5,val_6).
        txt_n(val_a,val_b,val_c).
        ";

$myArray = [];

//You're gonna see why we want to remove this character
//later, it will help us have a cleaner code.
$text = str_replace(')', '', $text);

$arrayGroup = explode('.', $text);

//print_r($arrayGroup);

foreach($arrayGroup as $array) {
    $exp = explode('(', $array);    
    $arrayName = trim($exp[0]);
    $arrayValues = explode(',', $exp[1]);

    foreach($arrayValues as $value) {
        ${$arrayName}[] = $value;
    }

    $myArray[$arrayName] = $$arrayName;
}

echo '<pre>';
print_r($myArray);
echo '</pre>';

echo '<pre>';
print_r($myArray['txt_2']);
echo '</pre>';
假设这个答案对你有帮助
$text=”
txt_1(val_1,val_2,val_3)。
txt_2(val_4、val_5、val_6)。
txt_3(val_a、val_b、val_c)。
";
$myArry=explode(“.”,$text);
$resArry=array();
foreach($myArry作为$key=>$value){
如果(修剪($value)!=“”){
$plain=str_replace(数组(“(“,”),“,”,$value);
$subary=分解(“,”,$plain);
$keyN=分解(“(”,修剪($value));
未设置($subary[array_search($keyN[0],$subary)]);
未设置($subary[array_search(“,$subary)]);
$resArry[$keyN[0]][]=$subArry;
}
}
回声“;
印刷(转售);
死亡
//输出将类似于
排列
(
[txt_1]=>数组
(
[0]=>阵列
(
[1] =>val_1
[2] =>val_2
[3] =>val_3
)
)
[txt_2]=>数组
(
[0]=>阵列
(
[1] =>val_4
[2] =>val_5
[3] =>val_6
)
)
[txt_3]=>数组
(
[0]=>阵列
(
[1] =>val_a
[2] =>val_b
[3] =>val_c
)
)
)
这是
$final
的输出


你测试过答案吗?@Viral我想这个答案也适用于动态数组,比如txt_1(val_1,val_2,val_3)。txt_1(val_4,val_5,val_6)。txt_2(val_7,val_8,val_9)。txt_3(val_10,val_11,val_12)。txt_3(val_13,val_14,val_15)。txt_4(val_16,val_17,val_18)。
<?php

$text = " 
        txt_1(val_1,val_2,val_3).
        txt_2(val_4,val_5,val_6).
        txt_n(val_a,val_b,val_c).
        ";

$myArray = [];

//You're gonna see why we want to remove this character
//later, it will help us have a cleaner code.
$text = str_replace(')', '', $text);

$arrayGroup = explode('.', $text);

//print_r($arrayGroup);

foreach($arrayGroup as $array) {
    $exp = explode('(', $array);    
    $arrayName = trim($exp[0]);
    $arrayValues = explode(',', $exp[1]);

    foreach($arrayValues as $value) {
        ${$arrayName}[] = $value;
    }

    $myArray[$arrayName] = $$arrayName;
}

echo '<pre>';
print_r($myArray);
echo '</pre>';

echo '<pre>';
print_r($myArray['txt_2']);
echo '</pre>';
    Suppose this answer will help you 

    $text = " 
    txt_1(val_1,val_2,val_3).
    txt_2(val_4,val_5,val_6).
    txt_3(val_a,val_b,val_c).
    ";

    $myArry = explode(".", $text);
    $resArry = array();

    foreach ($myArry as $key => $value) {
        if(trim($value)!=""){
            $plain = str_replace(array("(",")"),",",$value);
            $subArry = explode(",",$plain);

            $keyN = explode("(",trim($value));
            unset($subArry[array_search($keyN[0],$subArry)]);
            unset($subArry[array_search("",$subArry)]);
            $resArry[$keyN[0]][]=$subArry;    
        }

    }

    echo "<pre/>";
    print_r($resArry);
    die;

    //Output will be like 
Array
(
    [txt_1] => Array
     (
        [0] => Array
            (
                [1] => val_1
                [2] => val_2
                [3] => val_3
            )

    )

   [txt_2] => Array
     (
        [0] => Array
            (
                [1] => val_4
                [2] => val_5
                [3] => val_6
            )

    )

 [txt_3] => Array
     (
        [0] => Array
            (
                [1] => val_a
                [2] => val_b
                [3] => val_c
            )

    )

)
$input = 'txt_1(val_1,val_2,val_3).
        txt_1(val_4,val_5,val_6).
        txt_2(val_7,val_8,val_9).
        txt_3(val_10,val_11,val_12).
        txt_3(val_13,val_14,val_15).
        txt_4(val_16,val_17,val_18).'; // the input string

$temp = explode('.', $input); // seprates from .
$temp = array_filter($temp); // for cutting blank values
$temp = array_map('trim', $temp); // removes newlines

$final = [];

foreach($temp as $val)
{
    $key = strtok($val, '('); // search upto token (
    $final[$key][] = explode(',' ,strtok(')')); // advance token to )
}

unset($val, $temp); // unset non required things
Array
(
    [txt_1] => Array
        (
            [0] => Array
                (
                    [0] => val_1
                    [1] => val_2
                    [2] => val_3
                )

            [1] => Array
                (
                    [0] => val_4
                    [1] => val_5
                    [2] => val_6
                )

        )

    [txt_2] => Array
        (
            [0] => Array
                (
                    [0] => val_7
                    [1] => val_8
                    [2] => val_9
                )

        )

    [txt_3] => Array
        (
            [0] => Array
                (
                    [0] => val_10
                    [1] => val_11
                    [2] => val_12
                )

            [1] => Array
                (
                    [0] => val_13
                    [1] => val_14
                    [2] => val_15
                )

        )

    [txt_4] => Array
        (
            [0] => Array
                (
                    [0] => val_16
                    [1] => val_17
                    [2] => val_18
                )

        )

)