2012-02-28 34 views
5

Tôi nghĩ rằng điều này đã xảy ra trước đó, nhưng không thể tìm thấy bất kỳ câu trả lời nào cho nó. Nếu nó đã được trả lời xin vui lòng chỉ cho tôi đi đúng hướng với một liên kết.Xóa các mức nhận dạng đầu tiên trong mảng

Tôi có một mảng mà tôi không muốn xóa các mức nhận dạng đầu tiên. Tôi nghĩ rằng có một chức năng cho điều này?

Ví dụ về cách nó là:

[0] => Array 
     (
      [8] => Röd 
     ) 

[1] => Array 
     (
      [8] => Blå 
     ) 

[2] => Array 
     (
      [6] => Bobo 
     ) 

[3] => Array 
     (
      [8] => Grön 
     ) 

[4] => Array 
     (
      [7] => Sten 
     ) 

[5] => Array 
     (
      [8] => Vit 
     ) 

[6] => Array 
     (
      [7] => Guld 
     ) 

[7] => Array 
     (
      [6] => Lyxig 
     ) 

Những gì tôi wan't

[8] => Röd 
[8] => Blå 
[6] => Bobo 
[8] => Grön 
[7] => Sten 
[8] => Vit 
[7] => Guld 
[6] => Lyxig 
+0

Tôi nghĩ rằng đây là những droids bạn đang tìm kiếm: http://stackoverflow.com/questions/1181691/extract-leaf-nodes-of- multi-dimensional-array-in-php – Quasdunk

+0

Bạn kết thúc bằng các phím trùng lặp ... Các phím có thể được "đổi lại" (1, 2, 3, ...?) –

+0

kiểm tra câu trả lời của tôi sẽ loại bỏ các mức nhận dạng đầu tiên trong mảng và sẽ cung cấp cho bạn kết quả chính xác –

Trả lời

0
foreach($array as $key=>$val) { 
    $newarr[$val] = $array[$key][$val]; 
} 

chưa được kiểm tra!

+2

Một nên thêm rằng các khóa được công bố tất nhiên là không thể và sẽ bị ghi đè. – Sgoettschkes

12

Vấn đề ở đây là bảo quản các khóa cho số nhận dạng bạn muốn. Bạn có một số chuỗi tên có cùng khóa (như Blå và Röd). Bạn cần phải lưu trữ chúng trong một mảng hoặc sẵn sàng để mất chìa khóa.

Ví dụ với PHP5.3:

$processed = array_map(function($a) { return array_pop($a); }, $arr); 

này sẽ cung cấp cho bạn:

[0] => Röd 
[1] => Blå 
[2] => Bobo 
[3] => Grön 
[4] => Sten 
[5] => Vit 
[6] => Guld 
[7] => Lyxig 

Nó đã trở nên rõ ràng các phím trên mảng nội cần phải được bảo tồn bởi vì họ là một số loại id . Với điều đó nói rằng bạn phải thay đổi cấu trúc kết thúc bạn đang đi bởi vì bạn có thể có 2 của cùng một khóa trong một mảng duy nhất. Cấu trúc đơn giản nhất sau đó trở thành:

[8] => Array 
     (
      [0] => Röd, 
      [1] => Blå, 
      [2] => Vit, 
      [3] => Grön 
     ) 

[6] => Array 
     (
      [0] => Bobo, 
      [1] => Lyxig 
     ) 

[7] => Array 
     (
      [0] => Sten, 
      [1] => Guld 
     ) 

Để có được cấu trúc này một vòng lặp đơn giản sẽ làm việc:

$processed = array(); 
foreach($arr as $subarr) { 
    foreach($subarr as $id => $value) { 
     if(!isset($processed[$id])) { 
     $processed[$id] = array(); 
     } 

     $processed[$id][] = $value; 
    } 
} 
+0

Giải pháp tốt và đốm tốt của trứng cá muối – Luc

+0

Điều này trông giống như một giải pháp thực sự gọn gàng. Nhưng không thể làm cho nó hoạt động được. Nhập mảng khi bạn ghi trong $ arr. Nhận được thông báo sau: array_map() hy vọng tham số 1 là một cuộc gọi lại hợp lệ, thành viên mảng đầu tiên không phải là tên hoặc đối tượng lớp hợp lệ. Tôi có đoạn code sau ' array ( "8"=> "Vit" ), "6"=> array ( "7" => "Guld" ) ); $ xử lý = array_map ($ arrData, \t function ($ a) \t { \t \t trở array_pop ($ a); \t}); print_r ($ đã xử lý); ?> ' – Fredrik

+0

xin lỗi lật các đối số xung quanh :-) Đã cập nhật câu trả lời của tôi. – prodigitalson

0

Kiểm tra này ra đây là những gì mong đợi kết quả

<?php 
$arrData = array(
"5" => array 
     (
      "8" => "Vit" 
     ), 

"6" => array 
     (
      "7" => "Guld" 
     ) 
); 
foreach($arrData as $key=>$value): 
    foreach($value as $k=>$v): 
    $data[$k] = implode(',',$arrData[$key]); 
    endforeach; 
endforeach; 


print_r($data); 
?> 
1

sử dụng:

public function remove_level($array) { 
     $result = array(); 
     foreach ($array as $key => $value) { 
     if (is_array($value)) { 
      $result = array_merge($result, $value); 
     } 
     } 
     return $result; 
} 

sẽ trả về giá trị mảng cấp thứ hai theo thứ tự của mảng ban đầu. hoặc bạn có thể sử dụng array_walk

$results = array(); 
    array_walk($array, function($v, $k) use($key, &$val){ 
       array_merge($results, $v); 
    }); 
3

PHP array_column

$new_array = array_column($old_array,0); 

này sẽ lấy giá trị ở chỉ số 0 đối với từng mảng trong vòng $ old_array. Cũng có thể được sử dụng với mảng kết hợp.

0

Cố gắng hợp nhất mảng với nhà điều hành splat:

print_r(array_merge(...$array)); 
+0

Vui lòng thêm mô tả về cách câu trả lời được đề xuất sẽ giải quyết vấn đề. – Billa

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