У меня есть следующая функция. Он сравнивает одно значение с каждым значением в массиве.
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
,
Это способ, которым это может быть достигнуто на одной линии?
Спасибо
Это не то, для чего предназначены троичные операторы. Сохраняйте это простым (ПОЦЕЛУЙ). Вам вообще не нужно выражение 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;
}
Других решений пока нет …