2016-08-19 4 views
-1

Я хотел бы условно выполнять две функции:PHP, если либо еще несколько строк обсчитывать

while($row = mysql_fetch_assoc($result)) 
    (strtolower($message) == $row['question']) 
     ? msg($row['answer']) && update($row['question']) 
     : ''; 

но этот код не работает.

+2

* Что * не работает? Если msg() возвращает false, update() не будет запускаться, конечно. – Bert

+0

Каково определение msg() и update()? Это может вызвать проблемы. Поскольку вы говорите 'if (strtolower ($ message) == $ row ['question']) {msg ($ row ['answer']) && update ($ row ['question'])} else {return '' } ' – d3r1ck

+0

Синтаксис верный, никаких ошибок. Функции msg(); и update(); просто mysql_update. Этот код без update(); функция работает правильно. Когда они являются двумя функциями, вторая функция не работает. – mandaryneks

ответ

0

Есть ли причина, по которой вам нужно использовать сокращенный код для этого?

Следующие сведения были бы более читабельными, а также когда вы (или кто-то еще) приходите, чтобы обновить/изменить/рассмотреть/отладить код в будущем, будет гораздо более очевидным, каковы предполагаемые результаты.

while($row = mysql_fetch_assoc($result)) { 
    if (strtolower($message) == $row['question']) { 
     msg($row['answer']); 
     update($row['question']); 
    } 
} 

Обычно краткая версия: зарезервирована только для самых простых условий и действий.

0

Определим функцию msg_update(), которая оборачивает msg() и update():

function msg_update($row) { 
    msg($row); 
    update($row); 
} 

Тогда вы можете сделать:

while($row = mysql_fetch_assoc($result)) (strtolower($message) == $row['question']) ? msg_update($row['answer']) : ''; 

Это происходит потому, что tenary оператор принимает только простые операции. Надеюсь, это сработает для вас.

1

Стенограмма работает только для однострочных операторов. Так как ваш , если оператор содержит две строки, стенография не работает. Обычно в то время как петли в следующем формате:

while (/* condition */) 
{ 
    // code to be executed 
} 

Ваше тройная выражение также неправильно; она должна быть записана следующим образом:

(/* condition */) ? /* if true do this */ : /* if false do this */ 

Во второй части тройного оператора (?:), можно использовать условный оператор &&, который сравнивает два логических выражений. Насколько я понимаю, ваше намерение использовать && состоит в том, чтобы выполнить две строки, что неверно. Обратитесь к документации: PHP Docs (Comparison operators)

Вам нужно написать то время как цикл с фигурными скобками, потому что ваш если заявление содержит несколько строк кода, следующим образом:

while($row = mysql_fetch_assoc($result)) 
{ 
    if (strtolower($message) == $row['question']) 
    { 
     msg($row['answer']); 
     update($row['question']); 
    } 
} 
Смежные вопросы