2014-01-13 2 views
0

Вот моя функция, которая возвращает массив пунктов:Перебор массива в пределах многомерного массива

function first_paragraph() { 
     global $post, $posts; 
     $first_para = ''; 
     ob_start(); 
     ob_end_clean(); 
     $post_content = $post->post_content; 
     $post_content = apply_filters('the_content', $post_content); 
     $output = preg_match_all('%(<p[^>]*>.*?</p>)%i', $post_content, $matches); 
     $first_para = $matches[0][0]; 
     print_r($matches); 
} 

Какие результаты в следующем массиве:

(
    [0] => Array 
     (
      [0] => <p>I am not in any category.</p> 
      [1] => <p>Second paragraph.</p> 
      [2] => <p>Third paragraph</p> 
      [3] => <p>Fourth paragraph</p> 
     ) 

    [1] => Array 
     (
      [0] => <p>I am not in any category.</p> 
      [1] => <p>Second paragraph.</p> 
      [2] => <p>Third paragraph</p> 
      [3] => <p>Fourth paragraph</p> 
     ) 

) 

Можно ли перебрать только один из этих массивов, а не для обоих? Я новичок в PHP, поэтому любые рекомендации или ресурсы будут оценены.

PS: Я не уверен, почему preg_match_all возвращает два массива, может быть, кто-то может пролить свет на это?

+0

Просьбы представить более information.In вашего случая это preg_match_all – Oyeme

+0

Как вы там? Почему он дублируется? Сначала я начну понимать это. – elclanrs

+0

Опубликовать свой шаблон и код preg_match_all, чтобы мы могли видеть, что происходит – Rottingham

ответ

0

Да, вы можете сделать это:

foreach ($matches as $key => $paragraph){ 
    if($key == 0) { 
     // Here you can use the value of $paragraph 
     // $paragraph[0] contains "<p>I am not in any category.</p>" 
     // $paragraph[1] contains "<p>Second paragraph.</p>" 
     etc... 
    } 
} 
0

Я полагаю, что ваш пост данных выглядит следующим образом:

<p>I am not in any category.</p> 
<p>Second paragraph.</p> 
<p>Third paragraph</p> 
<p>Fourth paragraph</p> 

Так, согласно PHP.net, по умолчанию $ флажками параметр равен до PREG_PATTERN_ORDER, поэтому «Заказывает результаты, так что $ matches [0] - массив совпадений полного шаблона, $ matches [1] - массив строк, совпадающих с первым подшаблотелем в скобках и т. д.».

Так, например, если вы измените свои тупы к %<p[^>]*>(.*?)</p>%i, вы Воллу получат Somthing так:

(
    [0] => Array 
     (
      [0] => <p>I am not in any category.</p> 
      [1] => <p>Second paragraph.</p> 
      [2] => <p>Third paragraph</p> 
      [3] => <p>Fourth paragraph</p> 
     ) 

    [1] => Array 
     (
      [0] => I am not in any category. 
      [1] => Second paragraph. 
      [2] => Third paragraph 
      [3] => Fourth paragraph 
     ) 

) 

Так что, если вам нужно только подшаблоны, вы должны цикл только бросить подшаблоны массивов результатов. Я предполагаю, что в вашем случае это будет второй ($ matches [1]).

Подробнее о preg_match_all в PHP.net: http://php.net/manual/en/function.preg-match-all.php

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