2011-08-22 7 views
8

내가 다음과 같습니다 배열이 번호를 다시하는 array_merge 방지하는 방법 : 다음숫자 키

Array ( 
    [0] => Array ([unit_id] => 1 [unit_name] => Clown Fish) 
    [1] => Array ([unit_id] => L [unit_name] => Liter) 
    [2] => Array ([unit_id] => 2 [unit_name] => Elephant ) 
    [3] => Array ([unit_id] => 3 [unit_name] => Water Bottle) 
    [4] => Array ([unit_id] => 4 [unit_name] => Office Seating) 
    [5] => Array ([unit_id] => 5 [unit_name] => Green Green Grass) 
) 

을, 나는이

처럼 보이도록 배열을 변환하는 기능

function array_to_list($arr_data, $str_key, $str_value) { 
    $arr_list = array(); 
    if (is_array($arr_data)) { 
     foreach($arr_data as $arr_value) { 
      if (isset($arr_value[$str_key]) && isset($arr_value[$str_value])) { 
       $arr_list = array_merge($arr_list, array($arr_value[$str_key] => $arr_value[$str_value])); 
      } 
     } 
    } 
    return $arr_list; 
} 

을 썼다

Array ( 
    [1] => Clown Fish) 
    [L] => Liter) 
    [2] => Elephant) 
    [3] => Water Bottle) 
    [4] => Office Seating) 
    [5] => Green Green Grass) 
) 

대신 출력은

입니다.
Array ( 
    [0] => Clown Fish) 
    [L] => Liter) 
    [1] => Elephant) 
    [2] => Water Bottle) 
    [3] => Office Seating) 
    [4] => Green Green Grass) 
) 

나는 php 매뉴얼에 따라 "숫자 키가있는 입력 배열의 값은 결과 배열에서 0부터 시작하는 키가 증가하여 번호가 매겨집니다."라는 array_merge 자체의 특성과 관련이 있다고 가정합니다.

나는 array_merge의 유무에 관계없이 원하는 결과를 얻을 수있는 방법이 있습니까? 이 단지 출력 값을 설정

function array_to_list($arr_data, $str_key, $str_value) { 
    $arr_list = array(); 
    if (is_array($arr_data)) { 
     foreach($arr_data as $arr_value) { 
      if (isset($arr_value[$str_key]) && isset($arr_value[$str_value])) { 

       // This is the changed line: 
       $arr_list[ $arr_value[$str_key] ] = $arr_value[$str_value]; 

      } 
     } 
    } 
    return $arr_list; 
} 

:

+3

http://www.programmingfacts.com/merging-arrays-with-reindex-and-without-reindexing/ – PlagueEditor

+0

감사 너무 빨리 대답 했어. 솔루션이 너무 단순하다는 것을 알기는 당혹 스럽지만 아직 인터넷 검색을 할 때 찾을 수는 없습니다. 고맙습니다. – dqiu

답변

2

keyvalue를 추가 배열 직접. 매번 새로운 배열을 만들고 병합 할 이유가 없습니다. 또한 조금 더 빨라야합니다.

+0

나는 왜 당신의 해결책이 내 머리에 일찍 오지 않았는지 궁금해. 감사. 더 빠르다. 이전 버전보다 오버 헤드를 줄일 수 있다고 생각한다. – dqiu

0

왜 그냥 시도하지 않는 훨씬 단순한 접근 방식을 array_merge()을 삭제하고 새로운 $arr_list

function array_to_list($arr_data, $str_key, $str_value) { 
    $arr_list = array(); 
    if (is_array($arr_data)) { 
     foreach($arr_data as $arr_value) { 
      if (isset($arr_value[$str_key]) && isset($arr_value[$str_value])) { 
       $arr_list[$arr_value[$str_key]] = $arr_value[$str_value]; 
      } 
     } 
    } 
    return $arr_list; 
} 
+0

또는 @PlagueEditor와 같이 말했습니다 :''$ arr_list = $ arr_list + (array $ arr_value [$ str_key] => $ arr_value [$ str_value])); " –

+0

나는 실제로 둘 다 사용하고 있습니다 : D. 나를위한 일종의 운동. 고맙습니다. – dqiu

14

사용 '+'연산자 대신 array_merge() :

function array_to_list($arr_data, $str_key, $str_value) { 
$arr_list = array(); 
if (is_array($arr_data)) { 
    foreach($arr_data as $arr_value) { 
     if (isset($arr_value[$str_key]) && isset($arr_value[$str_value])) { 
      $arr_list = $arr_list + array($arr_value[$str_key] => $arr_value[$str_value]); 
     } 
    } 
} 
return $arr_list; 

}

+1

이것은 정확하게 (더 간단한 목적을 위해) 내가 필요했던 것입니다. 숫자 키를 사용하여 배열에 '0'키 앞에 번호를 매기 지 않고 번호를 붙이는 것입니다. 단순성과 정확성 때문에 – lhagemann

+0

+1 – Marecky