簡體   English   中英

在PHP中將兩個foreach循環合二為一?

[英]Two foreach loops into one in PHP?

給定以下內容:

$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>";
        }
    }
}

效果很好,但是我認為這不是最有效的方法,因為它要遍歷第一個數組中的每個條目的第二個數組……這似乎不正確。

如何提高效率?

您可以只使用一個for循環:

for ($i = 0; $i < count($titlesArray); $i++) {
    echo "<h1>".$titlesArray[$i]."<h1>";
    echo "<p>".$paragraphsArray[$i]."</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'],
];

由於所有明顯的答案都已發布,因此這是另一種方法

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM