PHP中的两个foreach循环合并成一个?
问题描述:
考虑以下几点: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>";
}
}
}
,工作正常,但我认为这不是最有效的方法,因为它是通过第一个中的每个项目的第二个数组......这看起来不正确。
如何让它更有效率?
答
使用敏感数据结构:
$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);
}
答
假设你已经正确设置阵列始终有一个项目相同的顺序和编号:
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'],
];
答
你可以只使用一个for循环:
for ($i = 0; $i < count($titlesArray); $i++) {
echo "<h1>".$titlesArray[$i]."<h1>";
echo "<p>".$paragraphsArray[$i]."</p>";
}
答
由于所有明显的答案已经发布,这里又是另一种由于不使用关联数组做
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
,首选的方法是一个'for'循环,它具有较少的内存开销。 – Jasper 2014-08-29 20:02:36