разорвать внутреннюю петлю foreach, но не все петли

Как вырваться из вложенного цикла foreach в PHP? Или, по крайней мере, я думаю, что это то, что мне нужно сделать. В основном у меня есть список предметов, таких как so

Item
|->Tag
|->Tag
Item
|->Tag
|->Tag
|->Tag->Tag has image

Набор предметов. Каждый элемент имеет некоторые теги и некоторые из этих тегов имеют изображение значка. Я хочу, чтобы цикл через элементы, то теги с в элементах, и если есть значок использовать его, если не оставить его пустым. Вот что у меня есть, но его Наборы Все элементы, чтобы иметь изображения, даже те, которые я знаю, не имеют тегов с иконками. Я предполагаю, что мне может понадобиться breakво вложенном foreachцикле? Когда я попробовал,казалось, что это делает вещи еще больше.

<?php foreach ($stories as $story) {

    $title = $story['content_name'];
    $desc = $story['content_social_description'];
    $image = $story['content_image'];
    $story_url = $story['content_slug'];
    $story_id = $story['content_id'];

    $tags = $story['tags'];

    foreach ($tags as $tag) {
        $tag_image = $tag['tag_image'];

        if($tag_image !== ''){
            $story_icon = $tag['tag_image'];
            //add break here? 
        }

        if ($tag['tag_type'] == 3) {
            $category = $tag['tag_name'];
        }

    }

    if( strlen($story_url) < 3){
        $story_slug = $story_id;
    }else{
        $story_slug = $story_url;
    }
?>

Это то, что один элемент выглядит, когда я цикл через теги. Опять же некоторые элементы будут иметь теги без иконок, связанных с ними.

array(4) {
  [0]=>
  array(10) {
    ["tag_id"]=>
    string(1) "1"
    ["tag_name"]=>
    string(8) "Featured"
    ["tag_score"]=>
    string(4) "2650"
    ["tag_type"]=>
    string(1) "1"
    ["tag_image"]=>
    string(0) ""
    ["tag_teamcount"]=>
    string(1) "0"
    ["tag_teamcolor"]=>
    string(0) ""
    ["tag_teamsocialprefix"]=>
    string(0) ""
    ["content_id"]=>
    string(1) "1"
    ["type_name"]=>
    string(5) "Admin"
  }
  [1]=>
  array(10) {
    ["tag_id"]=>
    string(1) "4"
    ["tag_name"]=>
    string(11) "Clean Water"
    ["tag_score"]=>
    string(1) "0"
    ["tag_type"]=>
    string(1) "3"
    ["tag_image"]=>
    string(0) ""
    ["tag_teamcount"]=>
    string(1) "0"
    ["tag_teamcolor"]=>
    string(9) "undefined"
    ["tag_teamsocialprefix"]=>
    string(9) "undefined"
    ["content_id"]=>
    string(1) "1"
    ["type_name"]=>
    string(7) "Explore"
  }
  [2]=>
  array(10) {
    ["tag_id"]=>
    string(2) "11"
    ["tag_name"]=>
    string(5) "Fast"
    ["tag_score"]=>
    string(4) "1400"
    ["tag_type"]=>
    string(1) "2"
    ["tag_image"]=>
    string(17) "TagIcon.png"
    ["tag_teamcount"]=>
    string(1) "0"
    ["tag_teamcolor"]=>
    string(0) ""
    ["tag_teamsocialprefix"]=>
    string(0) ""
    ["content_id"]=>
    string(1) "1"
    ["type_name"]=>
    string(9) "Exchanges"
  }
  [3]=>
  array(10) {
    ["tag_id"]=>
    string(2) "12"
    ["tag_name"]=>
    string(12) "Sub Featured"
    ["tag_score"]=>
    string(4) "3750"
    ["tag_type"]=>
    string(1) "1"
    ["tag_image"]=>
    string(0) ""
    ["tag_teamcount"]=>
    string(1) "0"
    ["tag_teamcolor"]=>
    string(0) ""
    ["tag_teamsocialprefix"]=>
    string(0) ""
    ["content_id"]=>
    string(1) "1"
    ["type_name"]=>
    string(5) "Admin"
  }
}

В основном для каждого элемента сканировать все теги. Если есть изображение, связанное с тегом, задайте переменную и перейдите к следующему элементу. Если изображения нет, не устанавливайте переменную для этого элемента и двигайтесь дальше после сканирования всех тегов элемента.

1 ответ

  1. Я думаю, тебе нужно сделать что-то подобное.

    1. Сброс story_icon и категории
    2. Используйте $categoryперед внутренним для каждого перерыва петли.

      <?php foreach ($stories as $story) {
      
      $title = $story['content_name'];
      $desc = $story['content_social_description'];
      $image = $story['content_image'];
      $story_url = $story['content_slug'];
      $story_id = $story['content_id'];
      
      $tags = $story['tags'];
      
      //reset the story_icon and the category
      $category = '';
      $story_icon = '';
      
      foreach ($tags as $tag) {
          $tag_image = $tag['tag_image'];
      
          if ($tag['tag_type'] == 3) {
              $category = $tag['tag_name'];
          }
      
          if($tag_image !== ''){
              $story_icon = $tag['tag_image'];
              break;
          }
      }
      
      if( strlen($story_url) < 3){
          $story_slug = $story_id;
      }else{
          $story_slug = $story_url;
      }
      ?>
      

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