【问题标题】:Php and javascript array - skipping blank values and adding to new array?PHP 和 javascript 数组 - 跳过空白值并添加到新数组?
【发布时间】:2012-04-03 00:34:08
【问题描述】:

我在 php 中有一个数组,其中包含文本文件的所有行(每一行都是数组的一个值)。我的文本文件有空行,所以数组也有空行。我想在数组中搜索某个值,如下所示:

$array = array();

        $lines = file("textfile.txt"); //file in to an array
        foreach ($lines as $line)
        {
            if (stripos($line, "$$") !== false) 
            {
                $array[] = str_replace("$$", "", $line);

            }
        }

上面的代码正在搜索 $$ 并将其替换为空白。文本文件包含一行 $$1 或任何数字,我希望它找到它正在执行的该行的所有实例。

我的问题是我希望它在找到 $$(number) 后找到接下来的 5 行不为空的行并将它们放入多维数组中。多维数组看起来与此类似(该程序是一个测试,以防您想知道为什么数组会这样命名):

$test = array(
    array('question' => 'What is the answer', 'ansa' => "answera", 'ansb' => "answerb", 'ansc' => "answerc", 'ansd' => "answerd"), // $test[1]
    array('question' => 'What is the answer', 'ansa' => "answera", 'ansb' => "answerb", 'ansc' => "answerc", 'ansd' => "answerd"), // $test[2]
);

$$(number) 后面的五行是一个问题和四个答案,需要放入数组中。我的 regxp 和搜索代码不起作用,所以我放弃了它。

【问题讨论】:

    标签: php javascript regex arrays search


    【解决方案1】:

    你可以试试这样的……

    <?php
    
    $lines = array_filter(file('text.txt')); //file in to an array
    $questions = array();
    
    // find your starts and pull out questions
    foreach ($lines as $k=>$line)
    {
        if (stripos($line, "$$") !== false) 
        {
            $questions[] =  array_slice($lines, $k, 5);
        }
    }
    
    
    // dump
    var_dump($questions);
    

    php manual for array_slice

    【讨论】:

    • 这不会检查空行,可以简单地添加。此外,您可能想用for 循环替换它,这样您就可以跳过下一个文件行,这样它就不会不必要地循环它们。
    • $lines = array_filter(file('text.txt')); 删除空行... Hosh,你是对的,但这只是示例。
    • 是的,我最困惑的最重要的一行。非常感谢!
    • 我尝试了删除空行的代码,但没有成功。
    • hm...如果行包含空格,则它们不为空。试试这个$lines = array_filter(array_map('trim', $lines))
    【解决方案2】:

    你看过preg_replace_callback吗?

    按照这些思路应该可以工作:

    <?php
    
    function replace_callback($matches) {
        var_dump($matches);
    }
    
    preg_replace_callback('/\$\$[0-9]+\s+([^'.PHP_EOL.']+){5}/is', 'replace_callback', file_get_contents('textfile.txt'));
    
    ?>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-06
      • 2013-05-27
      • 2021-09-29
      • 2021-12-31
      • 2017-09-14
      • 2020-09-29
      相关资源
      最近更新 更多