Проблема с циклом foreach - PullRequest
1 голос
/ 28 марта 2011

Я сделал этот код:

$matches = array();
preg_match_all('/"Type":".+?",/', $text, $matches);


foreach($matches[0] as $match) {
    if (isset($_GET['dvd']) && !empty($_GET['dvd'])) {
        $dvd = $_GET['dvd'];
        if (stripos($match, 'DVD') !== false) {
            $match = '';
        }
    }
    echo $match;
}

В этом коде я ищу слово «type» в $ text, и оно хранит всю строку со словами перед ним в массиве. А потом я перебираю каждый из них и вижу, есть ли слово DVD. Если это так, он удаляет его и отображает пустую строку.


Теперь я также хочу найти предполагаемого производителя и отобразить его под каждым возвращаемым типом.

Таким образом, он должен вернуть, если результат:

Type: HDD
Manufacturer: WD

Type: Flash Drive
Manufacturer: Transcend

Type: CD
Manufacturer: Sony

Поэтому я попытался сделать это с помощью другого выражения preg_match_all:

$anotherMatch = array();
preg_match_all('/"Manufacturer":".+?",/', $text, $anotherMatch);

И я попытался объединить это с предыдущим выражением foreach с оператором &&, но это не сработало. Также я попробовал различные выражения foreach, а затем один для повторения в конце. но это тоже не сработало.

Можете ли вы сказать мне, как достичь желаемого результата. Спасибо ...

1 Ответ

0 голосов
/ 29 марта 2011

Исходные данные приведены так:

"Type":"HDD",
"Manufacturer":"WD",
"Other":"Nonsense",
"Type":"Flash Drive",
"Manufacturer":"Transcend",
"Other":"More nonsense",
"Type":"CD",
"Manufacturer":"Sony",
"Other":"Yet even more nonsense",

И ожидаемый результат:

Type: HDD
Manufacturer: WD

Type: Flash Drive
Manufacturer: Transcend

Type: CD
Manufacturer: Sony

Вы можете использовать это регулярное выражение:

/"(Type|Manufacturer)":"([^"]+?)",/

И обведите его так:

preg_match_all('/"(Type|Manufacturer)":"([^"]+?)",/', $text, $matches);

foreach($matches[0] as $match => $line)
{
    if (!empty($_GET['dvd']) && stripos($matches[2], 'DVD') !== false)
    {
        continue;
    }
    echo $matches[1][$match] . ': ' . $matches[2][$match] . "\n";
}

Хотя, я не думаю, что это будет делать именно то, что вы хотите.

...