2013-08-28 4 views
0

У меня есть многомерный массив, который печатает именно то, что я хочу, однако я застрял в выяснении того, как я могу построить его в каждом цикле, который я находясь в поиске.Многомерный массив - foreach, в пределах foreach

Обращаем ваше внимание, что:: $ handle - это поле, которое клиент ввел в бэкэнд.

<?php 
$gp = Mage::getStoreConfig('social_code/social_group/google_field'); 
$ld = Mage::getStoreConfig('social_code/social_group/linkedin_field'); 
$tw = Mage::getStoreConfig('social_code/social_group/twitter_field'); 
$fb = Mage::getStoreConfig('social_code/social_group/facebook_field'); 

$social_array = array(
    "facebook" => array(
     'class' => "facebook", 
     'url' => 'https://www.facebook.com/', 
     'handle' => $fb 
    ), 
    "twitter" => array(
     'class' => "twitter", 
     'url' => 'https://www.twitter.com/', 
     'handle' => $tw 
    ), 
    "linked-in" => array(
     'class' => "linked-in", 
     'url' => 'http://www.linkedin.com/company/', 
     'handle' => $ld 
    ), 
    "google-plus" => array(
     'class' => "google-plus", 
     'url' => 'https://plus.google.com/', 
     'handle' => $gp 
    ) 
); 
?> 

Теперь я хочу, чтобы выплюнуть это как неупорядоченный список так что я ниже, но его до сих пор не работает для меня.

<ul> 
     <?php foreach ($social_array as $name => $group) :?> 
      <?php foreach ($group as $class => $url) :?> 
       <li><a href="<?php echo ("$url"); ?>" class="<?php echo ("$class;") ?>"><?php echo ("$group"); ?></a></li> 
      <?php endforeach; ?> 
     <?php endforeach; ?> 
    </ul> 

Я хотел бы так, чтобы она перебирает все социальный массив и Prins что-то подобное этому

<li><a href="<?php echo ($url);?><?php echo ($handle);?>" class="<?php echo ($class); ?>"><?php echo $name; ?></a></li> 

или так понял лучше

<li><a href="http://www.facebook.com/handle" class="facebook">Facebook</a></li> 

Кроме того, если я делаю это сложнее для меня, пожалуйста, дайте мне знать.

ответ

1
<ul> 
    <?php foreach ($social_array as $name => $group) :?> 
     <li><a href="<?php echo $group['url'].$group['handle']; ?>" class="<?php echo $group['class']; ?>"><?php echo $name; ?></a></li> 
    <?php endforeach; ?> 
</ul> 
0

Дайте этот выстрел:

<ul> 
    <?php foreach ($social_array as $name => $properties) :?> 
     <li><a href="<?php echo ($properties["url"] . $properties["handle"]); ?>" class="<?php echo ($properties["class"]); ?>"><?php echo ucfirst($name); ?></a></li> 
    <?php endforeach; ?> 
</ul> 

В этом Еогеасп, синтаксис foreach($array as $key => $value), поэтому здесь $name ключ от $ social_array и $properties это массив, связанный с этим ключом.

1

Я думаю, что это то, что вы ищете, если я правильно понял.

<ul> 
     <?php foreach ($social_array as $name => $group) :?> 
       <li><a href="<?php echo $group['url'].$group[handle']; ?>" class="<?php echo $group['class']; ?>"><?php echo $name 
     <?php endforeach; ?> 
</ul> 
1

Внутренний foreach внутренний нет необходимости.

<?php foreach ($social_array as $name => $group) :?> 
     <li><a href="<?php echo $group['url'] ?>" class="<?php echo $group['class'] ?>"><?php echo $group['class']; ?></a></li> 
<?php endforeach; ?> 
1

См. http://3v4l.org/3cH6f для примера, работающего ниже. Только один прожектор.

<?php 
$social_array = array(
    "facebook" => array(
     'class' => "facebook", 
     'url' => 'https://www.facebook.com/', 
     'handle' => 'Mage::getStoreConfig(\'social_code/social_group/twitter_field\')' 
    ), 
    "twitter" => array(
     'class' => "facebook", 
     'url' => 'https://www.facebook.com/', 
     'handle' => 'Mage::getStoreConfig(\'social_code/social_group/twitter_field\')' 
    ), 
    "linked-in" => array(
     'class' => "facebook", 
     'url' => 'https://www.facebook.com/', 
     'handle' => 'Mage::getStoreConfig(\'social_code/social_group/twitter_field\')' 
    ), 
    "google-plus" => array(
     'class' => "facebook", 
     'url' => 'https://www.facebook.com/', 
     'handle' => 'Mage::getStoreConfig(\'social_code/social_group/twitter_field\')' 
    ) 
); 

$html = '<ul>'; 

foreach ($social_array as $name => $class_array){ 
     $html .= '<li><a href="' . $class_array['url'] . $class_array['handle'] .'" class="' . $class_array['class']. '">'. $name. '</a></li>'; 
} 
$html .= '</ul>'; 

print $html; 
?> 
0

Вещь вы забываете, что внутренняя foreach обрабатывает каждый элемент, т.е. class,ulr,handle поштучно.

Таким образом, вам необходимо сохранить необходимую информацию при прохождении каждого из трех предметов, чтобы он мог использоваться, когда у вас есть 2 предмета, которые вам действительно нужны.

Так что это может помочь.

<ul> 
<?php 
    foreach ($social_array as $name => $group) : 

     $class = NULL; 
     $url  = NULL; 
     $handle = NULL; 

     foreach ($group as $name => $value) : 

      switch ($name) : 
       case 'class' : $class = $value;  break; 
       case 'url'  : $url = $value;  break; 
       case 'handle' : $handle = $value;  break; 
      endswitch; 

      if (isset($class) AND isset($url) AND isset($handle)) : 

       echo '<li><a href="' . $url.$handle . '" class="' . $class . '">' . $group . '</a></li>'; 

       $class = NULL; 
       $url  = NULL; 
       $handle = NULL; 
      endif; 

     endforeach; 

    endforeach; 
?> 
</ul> 
+0

Похоже, что это может пригодиться, я попробую его. Благодарю. – iamgraeme