我花了大约两个小时试图解决这个问题,所以最后我会在这里发布。
我在JSON提要中列出了一些作业,我正在使用PHP。我想获得特定地点的所有工作。位置逻辑工作正常,我得到了所有适当的工作。
我的问题来自于使else
语句生效。如果我使用下面的代码,它将为每个作业实例返回'No jobs available'
。我可以使用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
语句,并且只显示一次。
我正在寻找,用英语:对于每个工作,列出当前位置的工作。如果当前位置没有可用的作业,请打印一条声明“没有可用于您所在位置的作业。”
我为这样的新手逻辑相关问题道歉。经过一番搜索后找不到正确的答案。
答案 0 :(得分:3)
使用变量来提供此信息:
$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;
}
}
答案 1 :(得分:1)
如果你想要做的就是告诉你app
└───templates
├───templ1.hbs
├───templ2.hbs
└───templ3.hbs
数组中是否有单个位置,你就不需要自己的显式循环来搜索它。您可以将array_search
与array_column
结合使用,以获取该位置的作业索引或布尔值$ handlebars *.hbs -f templ.js
:
(...)\AppData\Roaming\npm\node_modules\handlebars\bin\handlebars:120
throw err;
^
Error: Unable to open template file "*.hbs"
at (...)\AppData\Roaming\npm\node_modules\handlebars\dist\cjs\precompiler.js:107:25
at FSReqWrap.oncomplete (fs.js:82:15)
答案 2 :(得分:0)
使用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'];
}
}