Как мне выйти из вложенного цикла 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"}
}
В основном для каждого элемента отсканируйте все теги. Если с тегом связано изображение, установите переменную и перейдите к следующему элементу. Если изображение отсутствует, вообще не устанавливайте переменную для этого элемента и продолжайте, как только все теги для этого элемента будут отсканированы.
Я думаю, тебе нужно сделать что-то подобное.
использование $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;
}
?>
попробуйте это и дайте мне знать, где проблема, если таковые имеются.
Других решений пока нет …