什麼是以下(總部設在JS風格)在PHP相當於:使用短路拿到第一個非空變量
echo $post['story'] || $post['message'] || $post['name'];
所以,如果存在的故事,然後張貼;或者如果消息存在後,等等...
什麼是以下(總部設在JS風格)在PHP相當於:使用短路拿到第一個非空變量
echo $post['story'] || $post['message'] || $post['name'];
所以,如果存在的故事,然後張貼;或者如果消息存在後,等等...
這將是(PHP 5.3+):
echo $post['story'] ?: $post['message'] ?: $post['name'];
而對於PHP 7:
echo $post['story'] ?? $post['message'] ?? $post['name'];
由於or
和||
都不返回它們不可能的操作數之一。
你可以儘管寫一個簡單的功能吧:
function firstset() {
$args = func_get_args();
foreach($args as $arg) {
if($arg) return $arg;
}
return $args[-1];
}
是的,我想這將是我的另一種方式,我希望有一個更短的執行方式。 –
最簡單的方法是切換例如到python:p – ThiefMaster
我認爲將不存在的var傳遞給這個函數會導致錯誤。 – pie6k
有一個班輪爲,但它不完全短:
echo current(array_filter(array($post['story'], $post['message'], $post['name'])));
array_filter
將返回你所有的非空白條目從替代品列表中。而current
只是從過濾列表中獲取第一個條目。
這是完美的;我會說這與我正在尋找的東西幾乎相當。謝謝馬里奧! –
+1對於單行 –
運行時,這將結束枚舉所有值,null或不是,對吧? JS示例將停止在第一個非空值。 –
如果設置了這些語法中的任何一個而不是false,則語法會回顯1,如果不是,則返回0。
這裏是做這其中工程並可以擴展到任意數量的選項的單行道:
echo isset($post['story']) ? $post['story'] : isset($post['message']) ? $post['message'] : $post['name'];
...很醜陋,但。編輯:馬里奧的比我的要好,因爲它尊重你所選擇的任意順序,但不像這樣,它不會隨着你添加的每個新選項而變得越來越醜。
但是,您的選擇會導致丟失關聯關鍵字,否則會生成php錯誤。 – Manatax
,您可以嘗試
<?php
echo array_shift(array_values(array_filter($post)));
?>
因爲品種是生活的調味品:
echo key(array_intersect(array_flip($post), array('story', 'message', 'name')));
作爲PHP 7的,則可以使用null coalescing operator:
空合併算子(??)已經被添加作爲語法糖 於需要結合使用的三元的常見的情況與 isset()。它返回它的第一個操作數,如果它存在並且不是NULL; 否則返回第二個操作數。
// Coalescing can be chained: this will return the first
// defined value out of $_GET['user'], $_POST['user'], and
// 'nobody'.
$username = $_GET['user'] ?? $_POST['user'] ?? 'nobody';
現在我們只需要等待PHP 7命中產品回購,超級興奮使用這個。 –
對於所問的問題,這將不起作用,除非並非所有字段都存在,因爲它不會將空字符串(如果字段爲空則返回)作爲NULL處理。 –
建立在亞當的回答,您可以使用錯誤控制操作以幫助抑制時未設置變量產生的誤差。
echo @$post['story'] ?: @$post['message'] ?: @$post['name'];
http://php.net/manual/en/language.operators.errorcontrol.php
什麼在這樣的運營商呢?你不知道你想輸出的某個變量嗎? –
只需要2個參數就可以使用:'echo isset($ _ POST ['story'])? $ _POST ['story']:$ _POST ['message'];',最終嘗試嵌套它。 – mj82
它基於facebook api流;每個職位只有三分之一存在。 –