2014-10-23 3 views
0

У меня есть следующая функция. Он сравнивает одно значение с каждым значением в массиве.PHP - как использовать 'break;' в тройном операторе

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. i.e Возвращаемое значение будет продолжать возвращаться к false, если условие true не находится в конце array.

Это их способ, которым это может быть достигнуто на одной линии?

Thanks

+0

Я думаю, что это избыток. Это не то, что должны делать троичные операции. – karthikr

+0

перерыв совершенно бессмыслен. 'return' прекратит выполнение функции, создав недостижимый код' break'. И так как у вас есть 'return 'в BOTH ветвях вашего' if() ', ваш цикл может делать только одну Итерацию. –

+0

Karth, не оспаривая, что это перебор :-). Спасибо, Марк, я не знал об этом – Swift

ответ

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() в сочетании с так:

function catExists($id) { 
    return array_search($id, array_column(getCats(), 'id')) !== FALSE; 
} 
+0

Согласен. Это чересчур, но мой мозг вот-вот должен взорваться от беспорядка. Идти минимальные швы, как хорошая альтернатива. Во всяком случае, большое вам спасибо :-) – Swift

Смежные вопросы