2012-06-11 5 views
2

Я довольно зеленый, когда дело доходит до php, так что вот основной вопрос, на который я еще не нашел ответа.php array многомерное индексирование

Я извлекаю повторяющуюся информацию со страницы, выполняя соответствующее регулярное выражение следующим образом. Регулярное выражение имеет две группы захвата (...), поэтому массив $matches имеет индекс от 0 (полное значение регулярного выражения) до 2 (1 и 2 - значения группы захвата).

<?php 
    $page = file_get_contents(url); 
    preg_match_all(regex-with-two-capturing-groups, $page, $matches); 
    $m1 = $matches[1]; 
    $m2 = $matches[2]; 
    for ($i=0; $i < sizeof($m1); $i++) { 
     echo ("<tr><td>$m1[$i]</td><td>$m2[$i]</td></tr>"); 
    } 
?> 

Это прекрасно работает, но сначала я попробовал более короткую версию:

<?php 
    $page = file_get_contents(url); 
    preg_match_all(regex-with-two-capturing-groups, $page, $matches); 
    for ($i=0; $i < sizeof($matches[0]); $i++) { 
     echo ("<tr><td>$matches[1][$i]</td><td>$matches[2][$i]</td></tr>"); 
    } 
?> 

, но это привело к

<tr><td>Array[0]</td><td>Array[0]</td></tr> 
<tr><td>Array[1]</td><td>Array[1]</td></tr> 
<tr><td>Array[2]</td><td>Array[2]</td></tr> 
<tr><td>Array[3]</td><td>Array[3]</td></tr> 
<tr><td>Array[4]</td><td>Array[4]</td></tr> 
... 

Почему это?
И есть ли способ сделать двумерную индексацию в одном выражении, не имея необходимости определять промежуточные массивы m1 и m2?

ответ

2

Используйте этот код:

<?php 
    $page = file_get_contents(url); 
    preg_match_all(regex-with-two-capturing-groups, $page, $matches); 
    for ($i=0; $i < sizeof($matches[0]); $i++) { 
     echo ("<tr><td>".$matches[1][$i]."</td><td>".$matches[2][$i]."</td></tr>"); 
    } 
?> 

PHP Документация: language.types.string.parsing

Смотри также здесь: PHP: concatenation of multidimensional array elements

+0

Хорошо, так. (точка) является своего рода оператором конкатенации строк? – Maestro13

+0

@ Maestro13: Да точно – rkosegi

+0

И почему «$ m1 [$ i]» работает, но «$ matches [1] [$ i]» нет? – Maestro13

Смежные вопросы