У меня есть новостная лента, где я хотел бы показать смешанный контент, который содержит три различных типа элементов. Допустим, это сообщения в блоге (тип 1), реклама (тип 2) и статьи (тип 3).
Я извлекаю данные для каждого типа элемента, который представляет собой массив, содержащий разные данные об элементе (например, автор, текст, дата и т. Д.).
Итак, у меня есть массив1, массив2, массив3.
Я хотел бы знать, как я могу смешать три внутри оператора foreach, чтобы они отображались в смешанной последовательности, то есть снова type1, type2, type3, в отличие от отображения всех элементов типа 1, а затем всех элементов типа 2 и так далее.
Я сделал:
$contentArray = array(
0 => $array1,
1 => $array2,
2 => $array3
);
foreach($contentArray as $itemType){
if($itemType == $array1){
//display template 1
}elseif($itemType == $array2)
//display template 2
}else{
//display template 2
}
Однако сначала отображаются все данные массива1, затем массив2 и т. Д.
Как структурировать оператор foreach, чтобы содержимое было смешанным?
При переборе массива существует индекс — при условии, что индексы массивов соответствуют от массива к массиву, вы можете попробовать что-то вроде: —
<?php
foreach( $array1 as $index => $value ){
echo $value .' '.$array2[ $index ]. ' '. $array3[ $index ];
}
?>
Если вы хотите случайные значения, вы можете попробовать следующий код:
$array1 = array('1' => 'item1' , '2' => 'item2', '3' => 'item3');
$array2 = array('1' => 'item1' , '2' => 'item2', '3' => 'item3');
$array3 = array('1' => 'item1' , '2' => 'item2', '3' => 'item3');
foreach( $array1 as $index => $value ){
$a = array(1,2,3);
shuffle($a);
echo $array1[$a[0]].' '.$array2[$a[1]].' '.$array3[$a[2]];
}