2011-03-28 113 views
1

我做了这个代码:问题的foreach循环

$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; 
} 

在这段代码中我搜索在$字文“类型”,并在它前面存储的话整条生产线在数组中。然后我遍历每一个,看看是否有字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表达式,然后在最后回显一个。但这也没有奏效。

你能告诉我如何达到预期的效果。谢谢...

+0

你有没有机会提供你试图从中获取信息的文本的例子? – 2011-03-28 15:30:51

+0

该文本将是没有任何HTML的格式化文本,并且只有一个搜索和回显,一切正常。但我想添加两个,因为我可以一起打印。 – 2011-03-28 15:34:44

+0

我们需要一个例子,如果我们应该知道如何得到这两个正则表达式将起作用。 – 2011-03-28 15:36:00

回答

0

鉴于源输入这样的:

"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"; 
} 

虽然,我不认为这将完全符合您的要求。