2011-01-09 4 views
-4

연관 배열을 검사하는 방법은 여러 가지가 있지만 좋지만 적합하지 않은 방법은 무엇입니까?PHP ~ 완전 연관 배열을 테스트하는 방법

$john = array('name' => 'john', , 8 => 'eight', 'children' => array('fred', 'jane')); 
$mary1 = array('name' => 'mary', 0 => 'zero', 'children' => array('jane')); 
$mary2 = array('name' => 'mary', 'zero', 'children' => array('jane')); 

여기 $ john은 완전히 연관되어 있으며, $ mary1과 $ mary2는 그렇지 않습니다.

+4

체크 연관 배열이란 무엇입니까? 모든 값에 지정된 키가 있음을 의미합니까? – alexn

+0

"확인"이란 무엇입니까? 배열에 연관 키만 들어 있는지 알고 싶습니까? 연관 배열을 순환하고 값을 확인 하시겠습니까? 네가 여기서 무엇을 묻고 있는지 전혀 모르겠다. – dqhendricks

+0

나는'$ john'과'$ mary1'의 차이점을 보지 못했습니다. –

답변

2

모든 배열이 같은 방식으로 구현되므로이를 짧게 만들 수는 없습니다. docs에서 :

PHP에서 배열은 실제로 주문지도입니다. 지도는 키에 값을 연결하는 유형입니다.

는 경우 구현에 어떤 통찰력이없는,하지만 난 array(1,2,3)가 정확히 동일 결국 array(0=>1, 1=>2, 2=>3) 단지 속기, 즉 것을 확신합니다. 당신이 그것을 구별 할 수있는 것은 없습니다.

가정 할 수array(value, value,...) 통해 생성 된 배열 0와 인덱스를 가지고 있고 다른 사람들이하지 않은 것을. 그러나 당신은 이미 이것이 항상 사실이 아니어야한다는 것을 이미 보았습니다.

"연관 배열"을 검색하려는 모든 시도는 어느 시점에서 실패합니다.

실제 질문 : 이 필요합니까?

+0

당신 말이 맞아요. 그래서 $ mary1 === $ mary2! – AdeleK

+0

왜? 일부 구성 배열을 검사하고 올바르게 설정되었는지 확인해야하기 때문에. – AdeleK

+0

@AdeleK : 귀하의 경우에 맞는 것은 무엇을 의미합니까? 구성 배열에 어떻게 액세스합니까? 단지 유효한 키만 포함하고 모든 키가 존재하는지 확인하고 싶다면, 그 키를 가진 배열을 정의하고'array_intersect ($ keys, array_keys ($ config))'가 비 었는지 확인하면됩니다. 어쩌면 가능한 해결책이 효과가 있을지 물어 보는 것보다 문제를 진술하는 것이 더 낫습니다. (하지만 당신은 그 문제에 대한 새로운 질문을 만들어야합니다). –

1

이게 당신이 찾고 있는게 있나요?

<?php 
function is_assoc($array) { 
    if(!is_array($array) || array_keys($array) == range(0, count($array) - 1)) { 
     return(false); 
    } 
    foreach($array as $value) { 
     if(is_array($value) && !is_assoc($value)) { 
      return(false); 
     } 
    } 
    return(true); 
} 
?> 

검색은 연관성 정의에 따라 다릅니다. 이 함수는 순차 숫자 키가없는 배열을 의미하는 연관성을 검사합니다. 어떤 사람들은 연관이 php에 의해 계산 된 것이 아니라 암시 적으로 키가 설정된 곳이라고 말할 수 있습니다. 다른 사람들은 모든 PHP 배열을 결합으로 정의 할 수도 있습니다 (이 경우 is_array()은 충분할 것입니다). 다시 말하지만, 모두 다릅니다. 그러나 이것은 제가 프로젝트에서 사용하는 기능입니다. 바라건대, 그것은 당신에게 충분합니다.

+0

슬프게도 없습니다. 배열이 완전히 연관되어 있는지 확인하는 방법을 찾고 있습니다. 모든 키가 정의되어 있고 자동으로 설정되는 방식이 아니라는 것을 의미합니다. 이는 문자열 키와 아무런 관련이 없습니다. – AdeleK

+0

바로이 함수가하는 일입니다. PHP에서 "자동으로 설정"되는 키는 기본적으로 0부터 시작하는 숫자입니다.이 함수는 배열이나 하위 배열의 모든 키가 0부터 시작하는 순차 숫자 일 때만 false를 반환하지만이 값은 함께 얻을 수있는 최상의 값입니다 PHP가 배열을 처리하는 방식. 필자가 아는 한, "키를 자동으로 설정"한 값으로 연관 키/값 쌍이 섞여있는 경우를 감지 할 수있는 방법이 없습니다. –

+0

내 지식 중 하나 :-) 그래서 나는 여기 와서 내가 옳았는지 잘못되었는지 보려고 노력했다. 감사 – AdeleK

관련 문제