我使用使用isset這個代碼,以檢查是否爲空:如何在php中爲數組定義默認值以避免未定義的偏移量?
if(!isset($this->objCodes[0]->SignupCode))$this->objCodes[0]->"NULL";
但它不工作。幫幫我?
我使用使用isset這個代碼,以檢查是否爲空:如何在php中爲數組定義默認值以避免未定義的偏移量?
if(!isset($this->objCodes[0]->SignupCode))$this->objCodes[0]->"NULL";
但它不工作。幫幫我?
您可能希望使用空來檢查值是否有可能無用的值。如果您SignupCode絕不會是一個空字符串(""
),0,或another empty value,試試這個:
if(empty($this->objCodes[0]->SignupCode))
{
$this->objCodex[0] = null;
}
我通常使用empty()
的原因是因爲如果我從一個數據庫導入,我要找的數據將始終返回到isset()
,因爲它是由數據庫設置的。我更感興趣的是它是否爲空或空字符串,因爲這意味着變量中沒有任何有價值的東西。
如果要裝載值到你的對象是這樣的:
if(isset($myObjs[0]->SignupCode))
由於該值在技術上始終:
這樣的測試時,您將永遠免費獲贈true
到isset()
功能將被'設置'
如果你真的想要看看它是否沒有設置,請試試這個:
if(!isset($this->objCodes[0]->SignupCode))
{
$this->objCodex[0] = null;
}
那麼是$this->objCodes
定義?如果是的話,它是一個數組?它也可以作爲一個字符串工作,因爲你可以把一個單一的字符組合成一個數組。此外,您的聲明實際上是檢查是否在對象上設置了SignupCode
...如果設置了$this->objCodes[0]
,則不是。
我相信您收到的錯誤來自無效的屬性訪問器->"NULL"
。
的isset功能應當用於檢查是否一個數組索引存在,如[0]索引你上objCodes檢查:
if(isset($this->objCodes[0])) {
如果不知道對象的類型您目前的objCodes陣列中擁有的SignupCode
的財產,我不能具體在回答中設置一個默認的,但如果我使用類ObjectCode
作爲一個例子,你可以這樣你的數組元素上設置的默認值:
if(!isset($this->objCodes[0])) {
$this->objCodes[0] = new ObjectCode();
}
如果我更瞭解y你試圖用這個代碼塊來實現我可能更具描述性。
UPDATE:如果你真的希望確保您的收藏始終還給您可以創建實施ArrayAccess interface容器中,然後實施offsetGet method返回默認值時,請求的索引中沒有找到:
public class ObjectCodeContainer implements ArrayAccess {
private $collection;
public function __construct() {
$this->collection = array();
}
public function offsetGet($offset) {
if(!isset($this->collection[$offset])) {
$this->collection[$offset] = new ObjectCode();
}
return $this->collection[$offset];
}
// implement the other abstract methods
}
$default = array('color' => 'blue', 'model' => 'Verizon', 'sex' => 'Female');
$new = array('color' => 'red', 'sex' => 'Male');
$array = array_merge($default, $new);
var_dump($array);
// array('color' => 'red', 'model' => 'Verizon', 'sex' => 'Male')
WTF?.................. –
@ Chacha102 - '我如何在php中爲數組定義一個默認值以避免未定義的偏移?' –
對,但只如果您需要特定已知密鑰的默認值,則可以使用。 –
你會得到什麼錯誤信息? – Gumbo
除非您希望它是一個字符串而不是空值,否則不會引用'NULL' – dnagirl