2014-07-25 84 views
0

我在處理數組時遇到問題。如果我訪問一個不存在的數組的索引,PHP會拋出一個錯誤,並且對於每個索引都會遇到困難。有什麼辦法可以爲數組的每個索引設置默認值,所以即使我訪問一個不存在的數組索引,然後它會返回默認設置值?PHP - 如何設置數組的每個索引的默認值

+0

發佈您的代碼:) –

+0

定義一個函數來訪問你的陣列,像這樣: '函數訪問($數組$鍵){回報isset( $ array [$ key])? $ array [$ key]:'默認值'; }''而只是使用'access($ array,'key')'而不是'$ array ['key']' – t3chguy

+0

這是PHP中的其中一件事。您需要習慣於檢查是否存在可能會丟失的密鑰,因爲如果沒有發出E_NOTICE,則沒有可避免的語法 –

回答

1

你這樣做不是想爲數組的每個索引設置一個默認值,除非你的數組真的很小。這將浪費處理和記憶。

你可以這樣做:

if (isset($array[$index])) { 
    $var = $array[$index]; // the index exists 
} else { 
    $var = 'default value'; // the index does not exist 
} 
// now so something with $var 
0

「面向對象」的方法:

你可以創建自己的ArrayAccess實現,它返回一個默認值(null爲例),如果關鍵你正在尋找不存在。最簡單的方法是擴大現有ArrayObject類:

class MyArray extends ArrayObject { 
    public function offsetGet($offset) { 
     if(!$this->offsetExists($offset)) { 
      return null; // or some default value 
     } 
     return parent::offsetGet($offset); 
    } 
} 

然後用這個來代替array()

$arr = new MyArray(); 
$arr['y'] = "I'm ok"; 
echo $arr['x']; // not set, default value (null) is returned. 
echo $arr['y']; // prints "I'm ok" 

程序方法:

你可以定義一個方法,該方法安全從您的陣列中獲得價值:

function safeGet($array, $key, $default = null){ 
    if(!is_array($array) && !$array instanceof ArrayAccess){ 
     throw new InvalidArgumentException('$array must be an array'); 
    } 
    return isset($array[$key]) ? $array[$key] : $default; 
} 

然後簡單地訪問使用這種方法你的價值觀:

$arr = array(); 
$arr['z'] = "I'm ok"; 

echo safeGet($arr, 'x'); // tries to access $arr['x']. prints null by default. 
echo safeGet($arr, 'y', 'default'); // tries to access $arr['y']. prints 'default'. 
echo safeGet($arr, 'z'); // key exists, prints "I'm ok".