2013-07-08 2 views
-1

Как я могу сгруппировать php foreach? I'v уже пробовал 5 дней, но все равно не могу заставить его работать Я не знаю, как php foreach, как это работает, но я изучаю это, Благодаря советам каждогоgroup php foreach loop (закрыто)

оригинальный PHP:

<?php if(isset($this->leading) && count($this->leading)): ?> 
     <?php foreach($this->leading as $key=>$item): ?> 
      <?php 

       $this->item=$item; 
       echo $this->loadTemplate('item'); 
      ?> 
     <?php endforeach; ?> 
    <?php endif; ?> 


    <?php if(isset($this->primary) && count($this->primary)): ?> 
     <?php foreach($this->primary as $key=>$item): ?> 
      <?php 

       $this->item=$item; 
       echo $this->loadTemplate('item'); 
      ?> 
     <?php endforeach; ?> 
    <?php endif; ?> 


    <?php if(isset($this->secondary) && count($this->secondary)): ?> 
     <?php foreach($this->secondary as $key=>$item): ?>   
      <?php 

       $this->item=$item; 
       echo $this->loadTemplate('item'); 
      ?> 
     <?php endforeach; ?> 
    <?php endif; ?> 

я попытался

<?php if(isset($this->leading) && count($this->leading)) && (isset($this->primary) && count($this->primary)) && (isset($this->secondary) && count($this->secondary)): ?> 
    <!-- Leading items --> 
     <?php foreach (array($this->leading, $this->primary, $this->secondary) as $key=>$item)   ($this->leading as $key=>$item): ?> 
      <?php 
       // Load category_item.php by default 
       $this->item=$item; 
       echo $this->loadTemplate('item'); 
      ?> 
     <?php endforeach; ?> 
    <?php endif; ?> 

но не работает

Как всегда, ваша помощь приветствуется!

Спасибо! Каждый :)

Спасибо, Стивен!

+0

Почему вы используете '' в каждой строке? –

+0

Я не понимаю, почему вы испортили код с тегом в каждой строке, когда вы можете написать весь код в одном теге? – Zohaib

+0

Вам действительно нравится иметь '' В каждой строке кода, не так ли? Но это действительно странно. Пожалуйста, переформатируйте его - его трудно прочитать. – ElmoVanKielmo

ответ

1

Вы имеете в виду что-то вроде этого ..?

<?php 

$arr = array(); 
$arr[] = $this->leading; 
$arr[] = $this->primary; 
$arr[] = $this->secondary; 

foreach($arr as $v) {  
    if(is_array($v) && (count($v) > 0)) { 
     foreach($v as $item) { 
      $this->item=$item; 
      echo $this->loadTemplate('item'); 
     } 
    } 
} 

?> 
+0

Спасибо, Стивен :) – MotoTony

0

Определение функции, как:

function foobar ($tmp) { 
    if(isset($tmp) && count($tmp)) { 
     foreach ($tmp as $key => $item) { 
      // Load category_item.php by default 
      $this->item = $item; 
      echo $this->loadTemplate('item'); 
     } 
    } 
} 

и вызвать его с данными:

foobar($this->leading); 
foobar($this->primary); 
foobar($this->secondary); 
+0

спасибо за ваше предложение M42 :) – MotoTony

0

Самый простой способ справиться с этим является первым построить список, содержащий все элементы, необходимо, а затем использовать только один foreach, чтобы перебирать этот список.

Я также рекомендую некоторую согласованность в том, определены ли три переменные (ведущие, первичные, вторичные). Если вы можете гарантировать, что они установлены и массивы - даже если они пустые массивы, это может сделать ваш код так же просто, как это:

<?php 
$items = array_merge($this->leading, $this->primary, $this->secondary); 
foreach ($items as $Item) { 
    $this->item = $item; 
    $this->loadTemplate('item'); 
} 
?> 

Если вы действительно не знаете ли установлены переменные , и вы не можете реорганизовать свой код в другом месте, чтобы изменить это, вы могли бы сделать это вместо:

<?php 
$items = array(); 
if (isset($this->leading)) $items = array_merge($items, $this->leading); 
if (isset($this->primary)) $items = array_merge($items, $this->primary); 
if (isset($this->secondary)) $items = array_merge($items, $this->secondary); 
foreach ($items as $Item) { 
    $this->item = $item; 
    $this->loadTemplate('item'); 
} 
?>