2010-02-18 38 views
22

Tôi có một mảng có giá trị là tất cả các mảng của một định dạng cụ thể mà trông như thế này:Chuyển đổi mảng php mảng vào mảng đơn

Array 
(
    [0] => Array 
      (
       [username] => John 
      )  
    [1] => Array 
      (
       [username] => Joe 
      ) 
    [2] => Array 
      (
       [username] => Jake 
      ) 
) 

và tôi muốn có điều này:

Array 
(
    [0] => John 
    [1] => Joe 
    [2] => Jake 
) 

Tôi có thể làm điều này bằng tay với một vòng lặp nhưng là có một cách tốt hơn? Nếu không, có thể thực hiện điều này cho một mảng các đối tượng có thuộc tính chung không?

Trả lời

28

Vì PHP 5.5.0 có hàm dựng sẵn array_column thực hiện chính xác việc này.

+0

Nếu bạn đang sử dụng PHP 5.3 hoặc 5.4, bạn luôn có thể sử dụng [thư viện này] (http://benramsey.com/blog/2013/07/the-array-column-php-userland-library/) [(mở -source)] (https://github.com/ramsey/array_column). –

+3

Làm thế nào tôi có thể sử dụng array_column nếu tôi không có khóa cụ thể cho mảng của tôi. Các khóa mặc định của nó được cung cấp trong php – Dinesh

27

tại sao lại phức tạp?

foreach($array as $k=>$v) { 
    $new[$k] = $v['username']; 
} 
2

Nếu bạn đang sử dụng PHP 5.3 bạn có thể tận dụng array_walk_recursive và đóng cửa (đóng cửa có thể được thay thế bằng một hàm bình thường nếu PHP của bạn phiên bản < 5.3):

function arrayFlatten(array $array) { 
    $flatten = array(); 
    array_walk_recursive($array, function($value) use(&$flatten) { 
     $flatten[] = $value; 
    }); 

    return $flatten; 
} 

$nested = array(
    array('username' => 'John'), 
    array('username' => 'Joe'), 
    array('username' => 'Jake'), 
); 

$flattened = arrayFlatten($nested); 

var_dump($flattened) 

array 
    0 => string 'John' (length=4) 
    1 => string 'Joe' (length=3) 
    2 => string 'Jake' (length=4) 
+0

Mảng chức năngFlatten (mảng mảng $) phải là arrayFlatten (mảng $ lồng nhau). – user1794918

0
$new = array_map(create_function('$auser', 'return $auser["username"];'), $array); 

Nếu sử dụng các đối tượng bạn chỉ có thể thay đổi return $auser["username"]; thành return $auser->get_username();

0

Hãy thử mã này:

foreach ($arr as $key => $val) 
{ 
    sort($val); 
    $new = array_merge($val, $new); 
} 
print_r ($new); 
0

Hãy thử điều này:

$list=array(); 
foreach($array as $v) { 
    array_push($list, $v['username']); 
} 
0

Nếu bạn không quan tâm đến các phím:

$new_array = array(); 

foreach($array as $v) { 

    $new_array[] = $v['username'] 
} 
2
$new_array = array_column($last_array, 'username'); 
0

Đối với những người đang sử dụng composer:

  1. nếu < = php5.5 array_column có thể sử dụng
  2. nếu> php5.5 các polyfills có sẵn như https://github.com/symfony/polyfill/tree/master/src/Php55 có thể được sử dụng. Sau khi bạn composer install symfony/polyfill-php55, sau đó bạn chỉ có thể gọi array_column như thể php5.4 của bạn hoặc thấp hơn đã có nó.
Các vấn đề liên quan