2012-02-22 2 views
0

PHP에서 키가 문자열 쌍인 연관 배열을 만들고 싶습니다.PHP는 C++의 std :: pair를 가지고 있습니까?

처음에는 문자열을 중간에 고유 한 구분선으로 연결하고 나중에 구분하는 것을 고려했지만 쌍을 사용할 때 해로운 해결 방법 인 것처럼 보입니다. 당신은 PHP에서 배열의 키와 같은 배열을 사용할 수 없기 때문에

$andrew = array('Andrew', 'Rasmussen'); 
$john = array('John', 'Smith'); 
$container[$andrew] = 15; 
$container[$john] = 12; 

$pair = array('Andrew', 'Rasmussen'); 
if (array_key_exists($pair, $container)) { 
    echo 'true'; 
} else { 
    echo 'false'; 
} 

은 분명히이 코드가 작동하지 않습니다

는 다음과 같은 코드를 생각해 보자. 좋은가 연결하고 나중에 문자열을 구문 분석하지 않고 이런 식으로 뭔가를 할 수 있습니까?

편집 나는이 작업을 수행하고자하는 이유가 있습니다. 나는 array(key=string1,value=array(key=string2,value=occurrences))을 가지고 있으며, 문자열 쌍의 상위 5 개 항목을 찾습니다. 그래서 기본적으로 이것을 1 차원 배열로 평면화 한 다음 정렬하여 상위 5 개를 쉽게 잡을 수 있습니다.하지만 이렇게하려면 정렬 후에 문자열을 개별적으로 추출 할 수 있어야합니다. 위에서 설명한 분할 알고리즘을 사용하여 수행 할 수 있지만 바람직하지 않습니다. 따라서 대체 방법을 요구합니다.

+0

가능합니까? 그렇습니다. 그러나 연결을 사용하고'폭발 '하는 것보다 훨씬 많은 작업이 필요합니다. – paxdiablo

+0

@paxdiablo 배열 + serialize() + 배열 unserialize()에 대한 귀하의 생각은 무엇입니까? –

+0

임의의 분리자를 발명 할 필요가 없으므로 직렬화가 더 좋을 것으로 생각됩니다. – paxdiablo

답변

2

방법에 대한 serialize 키?

$pair = array('Andrew', 'Rasmussen'); 
if (array_key_exists(serialize($pair), $container)) { 
    echo 'true'; 
} else { 
    echo 'false'; 
} 
+0

역 직렬화 할 수 있습니까? –

+0

unserialize가있는 것처럼 보입니다. 나는 이것이 여전히 가장 우아한 방법이라고 생각하지 않지만 확실히 간단합니다! 감사. –

+0

예, 병합 해제 할 수 있습니다! – nickb

1

다차원 배열을 사용할 수 있습니다 (예 : $container["Andrew"]["Rasmussen"]).

또한, 캡슐화 할 수있는 모든 "해킹"(수 그것을 배열이나 문자열 연결 두 차원) 다음과 같이 할 수있는 사용자 정의 ArrayIndexedByPairs 클래스에서 다음 보내고

interface IArrayIndexedByPairs { 
    public Add($key1, $key2, $value); 
    public Contains($key1, $key2); 
    public Get($key1, $key2); 
}