2014-08-29 61 views
0

考虑以下几点:PHP中的两个foreach循环合并成一个?

$arrayone = array('Title one', 'Title two'); 
$arraytwo = array('Content one', 'Content two'); 

我怎么会去了把以下内容:

<h2>Title one</h2> 
<p>content one</p> 

<h2>Title two</h2> 
<p>content two</p> 

我可以做一个嵌套的foreach像这样:

foreach ($arrayone as $key => $value) { 
    echo "<h4>$value</h4>"; 
    foreach ($arraytwo as $keysub => $valuesub) { 
     # code... 
     if($keysub === $key) { 
      echo "<p>$valuesub</p>"; 
     } 
    } 
} 

,工作正常,但我认为这不是最有效的方法,因为它是通过第一个中的每个项目的第二个数组......这看起来不正确。

如何让它更有效率?

+1

,首选的方法是一个'for'循环,它具有较少的内存开销。 – Jasper 2014-08-29 20:02:36

回答

2

使用敏感数据结构:

$content = array_map(null, $arrayone, $arraytwo); 

foreach ($content as $entry) { 
    printf('<h2>%s</h2>', $entry[0]); 
    printf('<p>%s</p>', $entry[1]); 
} 

甚至:

$content = array_combine($arrayone, $arraytwo); 

foreach ($content as $title => $body) { 
    printf('<h2>%s</h2>', $title); 
    printf('<p>%s</p>', $body); 
} 
1

假设你已经正确设置阵列始终有一个项目相同的顺序和编号:

for($i = 0; $i < count($arrayone); $i++) { 
    echo "<h4>{$arrayone[$i]}</h4>"; 
    echo "<p>{$arraytwo[$i]}</p>"; 
} 

你会用一个更明智的阵列格式更好,虽然:

$array = [ 
    ['title' => 'Title one', 'content' => 'Content one'], 
    ['title' => 'Title two', 'content' => 'Content two'], 
]; 
+0

ahhhhh我从来不知道我能做到这一点,它似乎更清洁! – vimes1984 2014-08-29 20:03:40

+0

是的阵列格式不是我自己所以... – vimes1984 2014-08-29 20:04:17

2

你可以只使用一个for循环:

for ($i = 0; $i < count($titlesArray); $i++) { 
    echo "<h1>".$titlesArray[$i]."<h1>"; 
    echo "<p>".$paragraphsArray[$i]."</p>"; 
} 
1

由于所有明显的答案已经发布,这里又是另一种由于不使用关联数组做

foreach (array_combine($arrayone, $arraytwo) as $title => $content) { 
    printf('<h2>%s</h2><p>%s</p>', $title, $content); 
} 
+0

我喜欢这个很多,因为它基本上是一个单线... – vimes1984 2014-08-29 20:09:37