Массив php и javascript - пропуск пустых значений и добавление в новый массив? - PullRequest
1 голос
/ 03 апреля 2012

У меня есть массив в 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 или любым числом, и я хочу, чтобы он нашел все экземпляры этой строки, что он и делает.

Моя проблема в том, что я хочу, чтобы он нашел следующие 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]
);

Следующие пять строк после $$ (число):вопрос и четыре ответа, которые должны войти в массив.Мой код с regxp и поиском не работает, поэтому я его отбросил.

Ответы [ 2 ]

1 голос
/ 03 апреля 2012

вы можете попробовать что-то вроде этого ...

<?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 для array_slice

0 голосов
/ 03 апреля 2012

Вы смотрели на 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'));

?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...