2011-08-22 39 views
8

tôi có một mảng mà trông như thế này:làm thế nào để ngăn chặn array_merge renumber phím số

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) 
) 

sau đó, tôi đã viết một hàm

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; 
} 

để chuyển đổi mảng để trông giống như

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

nhưng đầu ra, thay vào đó, là

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

tôi giả định điều này có liên quan đến bản chất của mảng array_merge, theo hướng dẫn sử dụng php "Giá trị trong mảng đầu vào với các phím số sẽ được đổi số với các phím gia tăng bắt đầu từ số không trong mảng kết quả."

là có một cách để vì vậy tôi có thể sản xuất các kết quả dự định có hoặc không có array_merge?

+3

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

+0

nhờ để trả lời quá nhanh. nó là đáng xấu hổ đối với tôi để xem các giải pháp rất đơn giản nhưng tôi không thể tìm thấy nó khi googling một thời gian trước đây. cảm ơn bạn. – dqiu

Trả lời

2

Tại sao bạn không chỉ cần cố gắng một cách tiếp cận đơn giản hơn nhiều:

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; 
} 

này chỉ đặt ra các giá trị trên đầu ra mảng trực tiếp. Không có lý do gì để tạo một mảng mới và hợp nhất nó mỗi lần. Nó cũng sẽ nhanh hơn một chút.

+0

tôi tự hỏi bản thân mình tại sao giải pháp của bạn không đến đầu tôi trước đó. cảm ơn. được nhanh hơn, tôi nghĩ rằng tôi có thể tiết kiệm chi phí hơn là với cái cũ. – dqiu

0

thả array_merge() và gắn keyvalue đến mới $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

hay như @PlagueEditor nói: '' $ arr_list = $ arr_list + (array ($ arr_value [$ str_key] => $ arr_value [$ str_value])); ' ' –

+0

Tôi đang sử dụng cả hai thực sự: D. một loại tập thể dục cho tôi. cảm ơn bạn. – dqiu

14

sử dụng '+' điều hành thay vì 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

Đây chính là điều mà tôi cần (cho một mục đích đơn giản) ... để thêm vào trước một '0' chìa khóa để một mảng với các phím số mà không renumbering các phím. – lhagemann

+0

+1 vì tính đơn giản và chính xác – Marecky

Các vấn đề liên quan