PHP-如何使用';中断';在三元算子中

PHP-如何使用';中断';在三元算子中,php,foreach,logic,ternary-operator,Php,Foreach,Logic,Ternary Operator,我有以下功能。它将一个值与数组中的每个值进行比较 function catExists($id) { $cats = getCats(); foreach ($cats as $cat) { if ($cat['id'] == $id) { return true;break; } else { return false; } } } 我试图通过使用三元运算符来缩短整个过程

我有以下功能。它将一个值与数组中的每个值进行比较

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当条件变为
真时
。i、 e除非
true
条件位于
数组的末尾,否则返回的值将继续恢复为
false

这是一种可以在一条线上实现的方法吗


谢谢

这不是三元运算符的本意。保持简单(吻)。您根本不需要break语句,因为
return
结束函数执行并将程序控件返回主程序

我会这样写:

function catExists($id) {
    foreach (getCats() as $cat) {
        if ($cat['id'] == $id)
            return true;          
    }
    return false; // 'return true' never happened, so return false
}
如果您真的想让它成为一行,您可以与like so结合使用:


我认为这是一种过度的杀伤力。这不是三元运算的目的。中断是完全没有意义的。
返回将终止函数,使
中断
代码无法访问。由于在
if()
的两个分支中都有一个
返回值
,因此循环只能进行一次迭代。Karth,毫无疑问,这是一次过多的操作:-)。谢谢马克,我不知道我同意。这太过分了,但我的大脑即将从混乱中崩溃。这是一个不错的选择。无论如何,非常感谢:-)
function catExists($id) {
    return array_search($id, array_column(getCats(), 'id')) !== FALSE;
}