2011-06-06 52 views
3

我有一段代碼,其中一個變量可以是數組或只是一個字符串。is_array()區別

if(!is_array($relation['display_name'])) 
{ 
    // do something with $relation['display_name'] 
} 
else 
{ 
    foreach($relation['display_name'] as $display_name) 
    { 
     // do the same with $display_name 
    } 
} 

這當然有用 - 但它不是很好。而且我必須做很多次。有沒有更好的方法來做到這一點?

+2

我認爲沒有錯在你的方法。你想要改進什麼? – 2011-06-06 12:29:15

+1

改爲創建一個函數。 – 2011-06-06 12:29:35

+0

「美在眼前」 – zaf 2011-06-06 12:30:43

回答

7

你可以這樣說:

foreach((array)$relation['display_name'] as $display_name) { 
    // do something with $display_name 
} 
+0

好的和短的解決方案!謝謝! – mseo 2011-06-06 12:49:31

+0

當'$ relation'變量真的不能轉換爲數組時,會不會導致錯誤? – Industrial 2011-08-12 17:28:05

5

你可以做這樣的事情:

if(!is_array($relation['display_name'])) { 
    $relation['display_name'] = array($relation['display_name']); 
} 

# do your foreach here 
+0

+1:另外一個提示是,如果有一天你使用的是按鍵,可以使用array_key_exists()函數代替:) – 2011-06-06 12:31:51

0

我覺得這不是處理這個問題一個壞的方式。我見過的大部分PHP代碼處理類似的東西。

1

我建議你看看解決問題的根源。

爲什麼$relation['display_name']有時是一個數組,有時不是?

修復問題比修補結果要好。

話雖這麼說,我會創建以下文件:

function transformToArray($mValue) { 
    return (is_array($mValue)) ? $mValue : array($mValue); 
} 
0

如果使用> = PHP 5.3,你可以嘗試這樣的事情。如果數組是單數或隱式地覆蓋所有數組成員,它將運行元素上的代碼。

function call($element, $func) { 
    if (is_array($element)) { 
     foreach($element as $value) { 
      $func($value); 
     } 
    } else { 
     $func($element); 
    } 
} 

call($relation['display_name'], function($display_name) { 
    // Anything you wanna. 
}); 

CodePad

1

你可以寫多少與三元運算符短:

foreach ((is_array($a) ? $a : array($a)) as $val) { 
    ... 
}