PHP-将字符串转换为已格式化为数组的数组

时间:2018-08-21 02:26:59

标签: php

为澄清起见,我使用2个单独的文件。因此,我正在尝试检查在第二个文件中生成的数组中是否存在一个值。第一个文件将输入存储在下面...

@${workspace}\\test.txt

我的第二个文件我尝试调用file_get_content,但现在意识到它将我的输入存储为字符串。有什么办法可以将此字符串转换回新文件中的数组?我已经尝试过json_decode,但是它说它为null ...或者,如果这太麻烦了,我也愿意更改存储在生成内容的第一个文件中的格式。

2 个答案:

答案 0 :(得分:3)

<?php

    $input = "Array
    (
        [0] => Bill
        [1] => Bob
        [2] => Joe
        [3] => Frank
        [4] => Mark
    )";

    $pattern = '/\[(?<keys>\w+)\]\s=>\s(?<values>\S+)/';
    preg_match_all($pattern, $input, $matches);
    $values = $matches['values'];
    $keys = $matches['keys'];
    $result = array_combine($keys, $values);
    print_r($result);
?>

答案 1 :(得分:1)

我将详细解释该解决方案,但首先让我发布代码:

    <?php //php 7.0.8

        $input = "Array
        (
            [0] => Bill
            [1] => Bob
            [2] => Joe
            [3] => Frank
            [4] => Mark
        )";

        $lines = explode("\n", $input); 
        $values = array();
        for ($i = 2; $i < count($lines) - 1; $i++) {
            $value = explode("=>", $lines[$i])[1];
            $value = trim($value);
            array_push($values, $value);
        }

        print_r($values);
    ?>

因此,文件包含格式化的数组作为文本,我们将文件的内容分成几行,这可以使用explode()函数完成,现在$lines数组包含的文本行该文件。
现在我们将循环提取值,注意循环从$i = 2开始,这是因为我们忽略了第一行(包含Array)和第二行(包含{{1} }),循环就在最后一行之前结束,因为我们忽略了最后一行(其中包含()。
我们初始化一个空数组)来存储数组的值,为此,我们再次需要使用$values函数分割每一行,但要记住分隔符为explode(),这将返回类似于(“ [0]”,“ Bill”)的数组,因为我们要使用字符串“ Bill”,所以我们使用索引1。
接下来(此步骤是可选的),我们使用=>函数消除了值之前的空白。
最后,我们将结果trim()推入空数组。
循环结束后,您将获得提取的值。
为了便于参考,以下是所用函数的文档:
$value http://php.net/manual/en/function.trim.php
trim() http://php.net/manual/en/function.explode.php
explode() http://php.net/manual/en/function.array-push.php