为澄清起见,我使用2个单独的文件。因此,我正在尝试检查在第二个文件中生成的数组中是否存在一个值。第一个文件将输入存储在下面...
@${workspace}\\test.txt
我的第二个文件我尝试调用file_get_content,但现在意识到它将我的输入存储为字符串。有什么办法可以将此字符串转换回新文件中的数组?我已经尝试过json_decode,但是它说它为null ...或者,如果这太麻烦了,我也愿意更改存储在生成内容的第一个文件中的格式。
答案 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