У меня есть массив, значения которого представляют собой все массивы определенного формата, которые выглядят следующим образом:
Array ( [0] => Array ( [username] => John ) [1] => Array ( [username] => Joe ) [2] => Array ( [username] => Jake ) )
и я хотел бы иметь это:
Array ( [0] => John [1] => Joe [2] => Jake )
Я могу сделать это вручную с помощью цикла, но есть ли лучший способ? Если нет, возможно ли это сделать для массива объектов, имеющих общий атрибут?
Начиная с PHP 5.5.0 есть встроенная функция array_column
которая делает именно это.
зачем усложнять вещи?
foreach($array as $k=>$v) { $new[$k] = $v['username']; }
Если вы используете PHP 5.3, вы можете использовать array_walk_recursive
и закрытие (закрытие может быть заменено нормальной функцией, если ваша версия PHP <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)
$new_array = array_column($last_array, 'username');
$new = array_map(create_function('$auser', 'return $auser["username"];'), $array);
Если вы используете объекты, вы можете просто изменить return $auser["username"];
для return $auser->get_username();
Попробуйте этот код:
foreach ($arr as $key => $val) { sort($val ); $new = array_merge($val, $new); } print_r ($new);
Попробуй это:
$list=array(); foreach($array as $v) { array_push($list, $v['username']); }
Если вам не нужны ключи:
$new_array = array(); foreach($array as $v) { $new_array[] = $v['username'] }
Для тех, кто использует composer
:
array_column
может использоваться composer install symfony/polyfill-php55
, вы можете просто вызвать массив array_column
как если бы ваш php5.4 или ниже имел его.