Ответ 1
Так как PHP 5.5.0 есть встроенная функция array_column
, которая делает именно это.
У меня есть массив, значения которого представляют собой все массивы определенного формата, которые выглядят следующим образом:
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'];
}
$new_array = array_column($last_array, 'username');
Если вы используете PHP 5.3, вы можете использовать array_walk_recursive
и закрытие (закрытие может быть заменено нормальной функцией, если ваша версия PHP и lt; 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)
Для других читателей, таких как я, если ключ username
отличается для каждого внутреннего массива, и вы хотите сгладить его, используйте это:
call_user_func_array('array_merge', $the_array);
Обратите внимание, что ключи должны быть разными. Как это:
[
0 => [
'a' => 1
],
1 => [
'b' => 2
]
]
После запуска кода у вас есть это:
[
'a' => 1,
'b' => 2,
]
Начиная с PHP 5.6 вы можете использовать оператор splat:
$newArray = array_merge(...$oldArray);
$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 или ниже имел его.