Intereting Posts
Создание случайных папок с использованием php Создайте файл Tar из каталога на PHP без exec / passthru Добавить пользовательское скрытое поле в форме PayPal и получить его на перенаправленной странице Как написать PHP-код для вывода JSON из сканирования каталога? Эхо в синтаксисе heredoc / nowdoc Я получаю неожиданную ошибку T_VARIABLE, когда я открываю приложение facebook с этим кодом. Пожалуйста, сделайте этот код правильным Бесплатная доставка в зависимости от веса и минимальной суммы Удаление всех файлов из папки с помощью PHP? Проверьте, содержит ли переменная круглые ссылки Как использовать инъекцию зависимостей в Zend Framework? Ежедневная загрузка XML на веб-сервер с фиксированных внешних URL-адресов Как отправить данные с JavaScript на PHP и наоборот? mod переписать с запросом Разработка компонента joomla с помощью запросов Ajax Yii: Множественный порядок по условиям

Использование if (! Empty) с несколькими переменными не в массиве

Я пытаюсь отполировать некоторый код с помощью функции if(!empty) в PHP, но я не знаю, как применить это к нескольким переменным, когда они не являются массивом (как это было раньше), поэтому, если у меня есть:

 $vFoo = $item[1]; $vSomeValue = $item[2]; $vAnother = $item[3]; 

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

  if (!empty($vFoo)) { $result .= "<li>$vFoo</li>"; } 

Я попробовал что-то вроде

 if(!empty($vFoo,$vSomeValue,$vAnother) { $result .= "<li>$vFoo</li>" $result .= "<li>$vSomeValue</li>" $result .= "<li>$vAnother</li>" } 

Но, конечно, это не сработает.

Вы можете создать новую функцию-обертку, которая принимает несколько аргументов и передает каждый через пустой (). Он будет работать аналогично isset (), возвращая true, только если все аргументы пусты, и возвращает false, когда достигнет первого непустого аргумента. Вот что я придумал, и это сработало в моих тестах.

 function mempty() { foreach(func_get_args() as $arg) if(empty($arg)) continue; else return false; return true; } 

Боковое примечание: ведущий «m» в «mempty» означает «множественный». Вы можете называть это так, как хотите, но это казалось самым коротким / простым способом назвать его. Кроме того … это весело. 🙂

Обновление 10/10/13. Возможно, я должен добавить, что в отличие от empty () или isset () функция mempty () будет кричать кровавым убийством, если вы передадите ему неопределенную переменную или несуществующий индекс массива.

Вам нужно написать цепочку условий. Используйте && для проверки нескольких переменных, каждый из которых имеет свой собственный empty() тест:

 if (!empty($vFoo) && !empty($vSomeValue) && !empty($vAnother)) { 

Но вы, вероятно, захотите разбить его на три, если вы можете применить дополнительный текст отдельно:

 if (!empty($vFoo)) { $result .= "<li>$vFoo</li>"; } if (!empty($vSomeValue)) { $result .= "<li>$vSomeValue</li>"; } if (!empty($vAnother)) { 

empty() может принимать только один аргумент. isset() , с другой стороны, может принимать несколько; он вернет true тогда и только тогда, когда будут установлены все аргументы. Тем не менее, это только проверяет, установлены ли они, а не если они пустые, поэтому, если вам нужно специально исключить пустые строки, вам придется делать то, что предлагает келлоти.

использовать логические / логические операторы:

 if (!empty($vFoo) && !empty($vSomeValue) && !empty($vAnother)) { $result .= "<li>$vFoo</li>" ... } 

Кроме того, вы можете присоединиться к ним с помощью or вместо. Как вы можете видеть, это может дать вам немного гибкости.

Сохраните некоторую типизацию и поместите ее в цикл …

 foreach (array('vFoo','vSomeValue','vAnother') as $varname) { if (!empty($$varname)) $result .= '<li>'.$$varname.'</li>'; } 

Как отмечали другие, empty() принимает только один аргумент, поэтому вам нужно использовать что-то вроде

 if(!empty($v1) && !(empty($v2) ...) 

но if (!empty($v)) то же самое, что и if($v) поэтому вы также можете использовать:

 if ($v1 && $v2 ...) 

Почему бы просто не перечеркнуть массив $ item

 foreach($item as $v) { if(!empty($v))) { $result .= "<li>$v</li>"; } } 

Вы также можете проверить значение ключевого индекса

 foreach($item as $key => $value) { if($key == 'vFoo') { if(!empty($value))) { $result .= "<li>$value</li>"; } } // would add other keys to check here } 

Для пустого () и isset ()

 $zero = array(0, "0"); foreach($zero as $z) { echo "\nempty(): $z "; var_dump($z); var_dump(empty($z)); // Will return true as in it's empty echo "isset(): $z "; var_dump(isset($z)); // will return true as it has value } 

Вывод:

 empty(): 0 int(0) bool(true) isset(): 0 bool(true) empty(): 0 string(1) "0" bool(true) isset(): 0 bool(true) 

Я не уверен на 100%, я понимаю, что вы пытаетесь сделать, но вот несколько возможных ответов:

Это возвратит каждую переменную, только если она не пуста:

 function printIfNotEmpty($var) { if (!empty($var)) { return '<li>' . $var . '</var>'; } return ''; } $result .= printIfNotEmpty($vFoo); $result .= printIfNotEmpty($vSomeValue); $result .= printIfNotEmpty($vAnother); 

Или это добавит все три из них, если ни один из них не будет пустым:

 if (!empty($vFoo) && !empty($vSomeValue) && !empty($vAnother)) { $result .= '<li>' . $vFoo . '</li>'; $result .= '<li>' . $vSomeValue . '</li>'; $result .= '<li>' . $vAnother . '</li>'; } 

Ребята, большое спасибо за все ваши ответы, я как бы создал сценарий, основанный на всех наших возможных ответах, который на самом деле помогает мне изучать синтаксис PHP, который является причиной большинства моих ошибок 🙂 Итак, вот оно

 $vNArray ['Brandon'] = $item[3]; $vNArray['Smith']= $item[4]; $vNArray ['Johnson']= $item[5]; $vNArray ['Murphy']= $item[6]; $vNArray ['Lepsky']= $item[7]; foreach ($vNArray as $key => $value){ if(!empty($value)){ $result .= "\t\t\t\t<li><strong>$key</strong>" .$value. "</li>\n"; } 

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

 $result .= "\t\t\t\t<li><strong>$key[0]</strong>" .$value. "</li>\n"; $result .= "\t\t\t\t<li><a href="thislink.com">$key[3]</a>" .$value. "</li>\n"; 

Спасибо, парни!

Я использую эту функцию в качестве альтернативы isset. Это немного проще, чем @ imkingdavid и возвращает true, если все аргументы (переменные) не пусты или возвращают false после первого пустого значения.

 function isNotEmpty() { foreach (func_get_args() as $val) { if (empty($val)) { return false; } } return true; } 

Почему бы не просто так:

 foreach(array_filter($input_array) as $key => $value) { // do something with $key and $value } 

Просто добавление в сообщение imkingdavid ;

Чтобы вернуть TRUE если какой-либо из параметров пуст, посмотрите ниже.

 function mempty(...$arguments) { foreach($arguments as $argument) { if(empty($argument)) { return true; } } return false; } 

Это ближе к тому, как работает isset() , и как я ожидал бы, что empty() будет работать, если будет поддерживать переменную длину параметров. Это также будет соответствовать тому, как работает empty() чтобы она вернула FALSE если все не пусто.


Если задано несколько параметров, isset () вернет TRUE только в том случае, если установлены все параметры. Оценка идет слева направо и останавливается, как только встречается неустановленная переменная.

PHP: isset – Руководство

Только для записи: array_reduce также работает.

 if (!array_reduce($item, function($prev_result,$next) { return $prev_result || empty($next); // $prev_result will be initial null=false })) { // do your stuff }