我有以下功能。它将一个值与数组中的每个值进行比较。
function catExists($id) {
$cats = getCats();
foreach ($cats as $cat) {
if ($cat['id'] == $id) {
return true;break;
} else {
return false;
}
}
}
我试图通过使用三元运算符缩短整个事情。
function catExists($id) {
foreach (getCats() as $cat) return ($cat['id'] == $id) ? true : false;
}
我遇到的问题是,当条件变为break;
时,我无法使用true
。即返回的值将保持还原为false
,除非true
条件位于array
的末尾。
他们是否可以在一条线上实现这一目标?
由于
答案 0 :(得分:1)
这不是三元运营商的意图。保持简单(KISS)。你根本不需要break语句,因为return
结束了函数执行并将程序控制返回给主程序。
我会这样写:
function catExists($id) {
foreach (getCats() as $cat) {
if ($cat['id'] == $id)
return true;
}
return false; // 'return true' never happened, so return false
}
如果您真的想让它成为一行,可以将array_column()
与array_search()
结合使用,如下所示:
function catExists($id) {
return array_search($id, array_column(getCats(), 'id')) !== FALSE;
}