2011-09-21 3 views
0

종종 배열을 연관 배열로 변환하는 기능이 필요합니다 (종종 isset을 사용하여 항목의 존재 여부를 확인할 수 있음).비 연관 배열을 연관 배열로 변환하는 가장 유용한 방법

저를 예를 들어 보겠습니다 :

$test = array("foo", "bar", "faz"); 

내가 좋아하는 뭔가이 변환하고 싶습니다 : (거의) 내가하고 싶은 것을 달성 나는 이러한 기술을 알고

$test = array("foo" => true, "bar" => true, "faz" => true); 

하지만 이보다 더 매끄럽고 세련된 뭔가를 찾고 있습니다.

$new = array(); 
foreach ($test as $v) $new[$v] = true; // want to do it without a loop 

$new = array_flip($test); // works for isset but array_values($new) are all different 

$new = array_map(function() { return true; }, array_flip($test)); // would work but verbose 

아이디어가 있으십니까? 함께 array_fill 평소처럼

+1

루프에 어떤 문제가 있습니까? 문제를 해결하는 것 같습니다. – cspray

+0

실제로 달성하려는 것은 무엇입니까? 'array_search'는 이들 해결책들과 결합 된'isset'보다 훨씬 더 효율적이고 (그리고 쉽게) 특정 값을 찾을 것입니다. 'if (array_search ('foo', $ test)! == false) {/ * do stuff * /}' –

+0

연상 배열은 물론 PHP 배열입니다. – markus

답변

2
$new = array_combine($test, array_fill(0, count($test), true)); 
+0

당신은'array_fill_keys'에 대한 참조를 추가하여 대답을 받아 들일 수 있습니까? – akirk

0

사용 array_combine, 당신은 단지 질문을해야하고 당신은 :-) 대답을 자신을 발견

PHP 5.2을 사용하면이 작업을 수행 할 수 있습니다

$new = array_fill_keys($test, true); 

해당 버전 아래에서이 대안을 사용할 수 있습니다.

당신이 배열과 장난하고 때마다, 관련 루프 :
$new = array_combine($test, array_fill(0, count($test), true)); 
1

+1

당신의 인수가'array_fill_keys()'예제에서 거꾸로 있다고 생각합니다. –

+0

사실, 고정, 감사합니다! – akirk

0

여기에 비밀 지식을가는 루프

없이 그것을 할 싶어. 비록 당신이 그것을 보지 않는다고해도.

는 isset에 대한 작동하지만 array_values ​​($ 신규) 그래서 모든 다른

입니까? 이 다른 값들에 어떤 문제가 있습니까?

작동 것이지만, 자세한

여기에 비밀 지식의 또 다른 조각을 간다 : 하나는 기능을 만들 수 있습니다. 원하는대로 코드를 숨길 수 있습니다.

솔직히 질문이 없습니다. 해결할 실제 문제가 없습니까?

어디에서 처음 배열을 가져 왔습니까?

+0

실제로'array_fill_keys()'메소드는 그것을하는 우아한 방법입니다. 예를 들어, 다른 배열을 반복하면서 첫 번째 배열에 값을 추가하는 경우와 같이 연관 배열을 사용하는 것이 대단히 도움이 될 수 있습니다. – akirk

+0

예 :'$ tags = array_fill_keys (get_from_data_source(), true); $ {$ tag [$ tag]) { // do x } else { $ 태그 [$ tag] = true; } } (이것은 추상화에 불과하며 1000 개 요소의 배열에 대해 이야기하고 있습니다.) – akirk

관련 문제