разорвать внутренний цикл foreach, но не все циклы

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

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

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

0

Решение

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

  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;
    }
    ?>
    

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector