Php 为foreach循环返回else语句
我花了大约两个小时试图弄明白这一点,所以最后我要把它贴在这里 我在一个JSON提要中有一个作业列表,我正在将其引入PHP。我想得到一个特定地点的所有工作。位置逻辑很好,我得到了所有合适的工作 我的问题是让Php 为foreach循环返回else语句,php,foreach,logic,Php,Foreach,Logic,我花了大约两个小时试图弄明白这一点,所以最后我要把它贴在这里 我在一个JSON提要中有一个作业列表,我正在将其引入PHP。我想得到一个特定地点的所有工作。位置逻辑很好,我得到了所有合适的工作 我的问题是让else语句起作用。如果我使用下面的代码,它将为每个作业实例返回“无可用作业”。我可以使用I++只返回一次,但无论我的工作是否匹配,它都会返回 // This code does not work properly foreach ( $json['jobs'] as $job ) { $l
else
语句起作用。如果我使用下面的代码,它将为每个作业实例返回“无可用作业”
。我可以使用I++
只返回一次,但无论我的工作是否匹配,它都会返回
// This code does not work properly
foreach ( $json['jobs'] as $job ) {
$location = $job['job']['location'];
if ( $location === $current_location ) {
echo 'Job title';
} else {
echo 'No jobs available';
}
}
这将返回如下结果:
Job title
Job title
No jobs available
Job title
所以基本上我需要从foreach循环中取出else
语句,并且只显示一次
我正在寻找,用英语:对于每个工作,列出当前位置的工作。如果当前位置没有可用的作业,请打印一条语句,说明“您的位置没有可用的作业”
对于这样一个与逻辑相关的新手问题,我深表歉意。搜索一段时间后找不到正确答案。请使用变量输入以下信息:
$jobs = [];
foreach ( $json['jobs'] as $job ) {
$location = $job['job']['location'];
if ( $location === $current_location ) {
$jobs[] = $job['job']['title'];
}
}
if(count($jobs) === 0) {
echo '"No Jobs Found" found';
} else {
foreach($jobs as $job) {
echo "See this awesome job: ".$job;
}
}
如果您只想知道是否在
$jobs
数组中表示单个位置,则不需要自己的显式循环来搜索它。您可以与结合以获取该位置的作业索引或布尔值false
:
$location = 'some location';
$key = array_search($location, array_column($json['jobs'], 'location'));
if(false === $key) {
// Array has no jobs at $location
} else {
// Array has jobs at $location
}
使用array_filter()可以使用简单的自定义函数而不是foreach循环筛选出具有匹配位置的作业项
然后检查过滤后的数组是否为空。如果是,则回显“无作业”消息;如果它不是空的,则循环该匹配位置的foreach作业项
<?php
function is_current_location($job) {
if ( $job ['location'] == CURRENT_LOCATION ) {
return true;
} else {
return false;
}
}
$jobs = array_filter( $json['jobs'], "is_current_location" );
if ( empty ( $jobs ) ) {
echo 'No jobs available';
} else {
foreach ( $jobs as $job ) {
echo $job['job_title'];
}
}
如果作业不可用,则在else中将标志设置为true,如果标志为true,则输出不可用作业。可能更容易将数组重新构建到位置=>作业类型的设置中。然后使用$current_location,您可以只对新数组进行索引检查,如果它存在,则拉取在其下找到的所有子元素/作业。您在问题中显示的代码是否只是用于打印一个位置的作业的代码?是的,我只想打印一个位置的作业。作业打印得很好,我唯一的问题是在特定位置没有作业可用时打印“无可用作业”。我的逻辑要么总是正确的,要么总是错误的。那么,每个$job
是否包含多个作业?您好!谢谢你的评论。然而,我做到了,在两页上都打印出了“找不到工作”。这是因为我的if
语句正在从特定位置查找作业,而else
列出了所有可用的作业。因此,if($noJobs)
在两种情况下都返回true:-/现在我明白你的问题了。已编辑,请查看仅当作业数组仅包含1个位置时,此选项才有效。循环遍历所有作业,如果有多个位置,代码将始终将$noJobs标记为true。这是您进行编辑之前的评论。更新后的代码应该可以工作了。我现在还不能让它工作,但我会继续尝试。在我的数组中,作业标题是$job['job']['title']
。虽然我找不到任何语法错误,但它始终返回500…这就成功了!非常感谢,很抱歉延迟接受。foreach后面有一个额外的括号,当我列出$jobs=[]时代码>在顶部,它不起作用,但在删除这两个东西后,我简单地创建了$jobs[]=$job['job'],并从else中的变量中删除了第一个多数组。我尝试了这个方法,但无法使它起作用。我认为您拥有的$location
就是我拥有的$current\u location
,而$jobs
是$job
,但还没有工作。请注意,这根本不在循环中,您应该将包含所有作业的整个数组传递给它。在上面的问题中,您正在循环使用$json['jobs']
,所以我会尝试一下