2008-10-28 6 views
13

빈 문자열로 보이는 키가 있지만 unset($array[""]);을 사용하면 키/값 쌍이 제거되지 않습니다. 내가 원하는 것을 수행하는 다른 함수가 보이지 않기 때문에 함수를 호출하는 것이 더 복잡하다고 생각합니다.PHP의 연관 배열에서 비어있는 값을 어떻게 제거합니까?

print_r에있는 요소의 행은 [] => 1이며 키가 빈 문자열임을 나에게 알려줍니다.

var_export를 사용하면 요소는 '' => 1으로 표시됩니다.

var_dump를 사용하면 요소는 [""]=>int(1)으로 나열됩니다.

지금까지 모든 제안 된 방법을 시도했지만 아무도 요소를 제거하지 않았습니다. unset($array[""]);, unset($array['']);unset($array[null]);을 사용해 보았습니다.

답변

24

시도 unset($array[null]);

그래도 작동하지 않는다면, print_r 대신 var_export 또는 var_dump을 통해 배열을 인쇄하십시오. 그러면 키의 유형을 볼 수 있습니다. PHP 구문의 데이터를 보려면 var_export을 사용하십시오. var_export 재귀 구조와 작동하지 않습니다

var_export($array);

참고.

+0

어딘가에 줄을 따라 null 값이 빈 문자열로 변환되었습니다. 배열의 근원으로 가서 null 값을 설정하지 않음으로써 문제를 해결할 수있었습니다. –

+0

축하합니다. :) – Lemming

+2

From http://php.net/manual/en/language.types.array.php : "TRUE를 키로 사용하면 정수 1을 키로 평가할 수 있습니다. FALSE를 키로 사용하면 정수 0으로 평가됩니다. NULL을 키로 사용하면 빈 문자열로 평가됩니다. 빈 문자열을 키로 사용하면 빈 문자열과 해당 값이있는 키가 작성 (또는 덮어 쓰기)됩니다. – okalex

1

제 생각에 비어있는 문자열이 아닙니다.

foreach ($array as $index => $value) { 
    echo $index; 
    echo ' is '; 
    echo gettype($index); 
    echo "\n"; 
} 
+0

나는 배열에서 print_r을하고 있는데, 빈 문자열로 보입니다. –

+0

일단 작동하는 대답을 얻으면 좋은 생각이기 때문에 upvote 할 것입니다. 그러나 나는 그것이 작동하는 대답을 찾은 것처럼 보이기를 원하지 않는다. –

2

이 시도 :

$someList = Array('A' => 'Foo', 'B' => 'Bar', '' => 'Bah'); 
print_r($someList); 
echo '<br/>'; 
unset($someList['A']); 
print_r($someList); 
echo '<br/>'; 
unset($someList['']); 
print_r($someList); 
echo '<br/>'; 

있어 : 당신이 무엇을 얻을 확인하기 위해 다음을 시도 ...

Array ([A] => Foo [B] => Bar [] => Bah) 
Array ([B] => Bar [] => Bah) 
Array ([B] => Bar) 

당신은 분석해야 키가 너무에서 온

1

print_r 대신 var_dump을 사용해보세요. 이것은 당신에게 열쇠가 정확히 무엇인지에 대한 더 나은 생각을 줄 수 있습니다.

0

요소를 제거하는 데 사용하는 코드와 해당 줄의 앞뒤에있는 검사기 코드를 게시하십시오.

var_export($array); 
echo "\n"; 
unset($array[""]); 
var_export($array); 

도 모두 var_export 라인의 전체 출력을 게시하시기 바랍니다 : 내가 무엇을 찾고

이 같은 것입니다.

나는 이런 식으로 뭔가를 찾고 있어요 : 당신 말씀이 확실하지

array (
    '' => 1, 
) 
array (
) 
+0

나는 코드를 바로 게시하고 있습니다. –

+0

나는 (그리고) 확신하지 못했다. 올바르게 점검하고있다. 범죄는 없지만 코드가 작동해야합니다. 우리 가정 중 하나가 잘못되었음을 나타내지 않는다는 사실. 확인을 위해 요약본이 아닌 무수정의 요약되지 않은 전체 코드를보고 싶었습니다. – Lemming

1

합니다.이 스크립트

<?php 

$arr = array(
     false => 1 
    , true => 2 
    , null => 3 
    , 'test' => 4 
// , ''  => 5 
); 

print_r($arr); 

foreach ($arr as $key => $value) 
{ 
    var_dump($key); 
} 

unset($arr['']); 

print_r($arr); 

을 실행 I 얻을

Array 
(
    [0] => 1 
    [1] => 2 
    [] => 3 
    [test] => 4 
) 
int(0) 
int(1) 
string(0) "" 
string(4) "test" 
Array 
(
    [0] => 1 
    [1] => 2 
    [test] => 4 
) 

은 "널 (null)"배열 키 유형은 빈 문자열로 변환 된 방법을 참조하십시오 다음과 같은 출력?

배열 복사본을 사용 하시겠습니까? 함수 안에서 unset()에 대한 호출을 수행했다면, 당신이 가능할 수도 있습니다.

이것은 PHP 5.2.0에서 테스트되었습니다.

+0

와우, 배열 키로 사용할 때 null이 빈 문자열로 변환된다는 것을 깨닫지 못했습니다. 미친 행동. unset ($ array [null])은 unset ($ array [ ''])처럼 작동합니다. – Lemming

관련 문제