0

多维数组一直没能找到一个直接的答案尚未..我的数组$ sitematches:打印从preg_match_all

if (preg_match('/<start>(.*?)<finish>/s', $source, $matches)) { 
    if (preg_match_all('/<a\s[^>]*href=\"([^\"]*)\"[^>]*>(.*)<\/a>/siU', $matches[1], $sitematches)); { 
    print_r($sitematches); 
    } 
} 

生产:

Array 
(
    [0] => Array 
     (
      [0] => <A HREF="http://site1.com">aaa</A> 
      [1] => <A HREF="http://site2.com">bbb</A> 
      [2] => <A HREF="http://site3.com">ccc</A> 
      [3] => <A HREF="http://site4.com">ddd</A> 
     ) 

    [1] => Array 
     (
      [0] => http://site1.com 
      [1] => http://site2.com 
      [2] => http://site3.com 
      [3] => http://site4.com 
     ) 

    [2] => Array 
     (
      [0] => aaa 
      [1] => bbb 
      [2] => ccc 
      [3] => ddd 
     ) 

) 

我怎么能输出:

1 - aaa - http://site1.com 
2 - bbb - http://site2.com 
3 - ccc - http://site3.com 
4 - ddd - http://site4.com 

回答

0

用foreach另一个possibilty是:需要

foreach ($sitematches[1] as $key => $url) 
    print "$key - {$sitematches[2][$key]} - $url\n"; 

但至少有一个直接数组访问。

+0

很好,避免计数因此效率更高,对不对? – Adrian33 2013-04-06 12:19:35

+0

我没有知道,但我认为这很可能...写出你自己的microbenchmark ;-) – bwoebi 2013-04-06 12:21:11

+0

谢谢你回答这个问题,应该让你为更困难的事情变暖。 – Adrian33 2013-04-06 12:25:41

1
for ($i = 0; $i < count($sitematches[0]); $i++) 
    print "$i - {$sitematches[2][$i]} - {$sitematches[1][$i]}\n"; 

简单地得到大小(计数($ S itematches [0])),然后遍历数组。

+0

的作品。出于好奇,是否有任何方法来避免计数和使用:foreach($ sitematches .... – Adrian33 2013-04-06 11:53:46

+0

我已经添加了另一个答案。 – bwoebi 2013-04-06 12:02:37