2010-02-15 2 views
0

정의되지 않은 오프셋을 피하기 위해 PHP에서 배열의 기본값을 어떻게 정의합니까?

isset을 사용하여이 코드를 사용하여 비어 있는지 확인합니다.

 if(!isset($this->objCodes[0]->SignupCode))$this->objCodes[0]->"NULL"; 

그러나 작동하지 않습니다. 도움?

+0

어떤 오류 메시지가 표시됩니까? – Gumbo

+0

null 값 대신 문자열이되기를 원하지 않는 한'NULL'을 인용하지 마십시오. – dnagirl

답변

3

값이 쓸모없는 값인지 확인하려면 비어있는 것을 사용하는 것이 좋습니다. 당신의 SignupCode이 (""), 0, 또는 another empty value 빈 문자열 수 없을 경우,이 시도 :

if(empty($this->objCodes[0]->SignupCode)) 
{ 
    $this->objCodex[0] = null; 
} 

나는 데이터베이스에서 수입하고있는 경우 때문에 일반적으로 empty()를 사용하는 이유는, 내가 찾고 있어요 데이터를 isset()이 데이터베이스에서 설정되었으므로 항상 true를 반환합니다. 변수에 값의 어떤 것도 실제로 없다는 것을 의미하기 때문에 null이거나 빈 문자열이면 더 관심이 있습니다.

이 같은 개체에 값을로드하는 경우 : 값이 기술적으로 항상이기 때문에

if(isset($myObjs[0]->SignupCode)) 

: 다음과 같이 테스트 할 때

$result = mysql_query("Some Query"); 
while($temp = mysql_fetch_assoc($result) 
{ 
    $myObj = new stdClass; 
    $myObj->SignupCode = $temp['SignupCode']; 
    $myObjs[] = $myObj; 
} 

당신은 항상 isset() 함수에 true을받을 것이다 '설정'될 것입니다

실제로 설정되지 않았는지 확인하려면 다음을 시도하십시오 :

if(!isset($this->objCodes[0]->SignupCode)) 
{ 
    $this->objCodex[0] = null; 
} 
+1

empty()를 사용하면 값 0 또는 "0"이 올바르지 않게됩니다. – aefxx

+0

내 대답을 다시 읽어주세요 ... –

+1

OP의 질문을 해석하는 방식으로, SignupCode라는 이름의 멤버가있는 개체이거나 isset으로 테스트하려고합니다. – aefxx

0

잘 정의 된 것은 $this->objCodes입니까? 그렇다면 배열입니까? sring을 처리 할 수 ​​있기 때문에 문자열로도 작동합니다. 단일 문자 배열. 또한 성명서를 가지고 실제로 SignupCode이 객체에 설정되어 있는지 확인합니다 ... $this->objCodes[0]이 설정되어 있지 않습니다.

1

내가받는 오류가 잘못된 속성 접근자인 것 같습니다 (->"NULL"). 배열 인덱스가 존재하는 경우

는 isset 기능은 사용자가 objCodes 검사하는 [0] 인덱스로서 확인하는데 사용되어야한다 개체 유형을 모르고

if(isset($this->objCodes[0])) { 

는 현재 objCodes 배열이

if(!isset($this->objCodes[0])) { 
    $this->objCodes[0] = new ObjectCode(); 
} 

경우 : 그게 내가 기본 설정에 대한 답변 특정 할 수 없다하지만 예를 들어 클래스 ObjectCode를 사용하는 경우이 같은 배열의 요소에 대해 디폴트 값을 설정할 수 있습니다 SignupCode의 속성이 있습니다 나는 무엇에 대해 더 많이 알고 있었다. 그 코드 블록을 사용하여 더 많은 것을 설명 할 수 있습니다.

UPDATE : 요청 된 인덱스가 발견되지 않을 때 당신은 정말 당신의 수집은 항상 기본을 반환 할 offsetGet method을 구현 한 후 ArrayAccess interface을 구현 컨테이너를 만들 수있는 값을 돌려 준 것을 확인하고 싶었다면 :

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 
} 
0
$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') 
+1

WTF? .................. –

+0

@ Chacha102 -'정의되지 않은 오프셋을 피하기 위해 PHP에서 배열의 기본값을 어떻게 정의합니까? ' –

+0

맞아요. 특정 알려진 키에 대한 기본값을 원할 경우 작동합니다. –

관련 문제