我有一个数组,其值是特定格式的所有数组,如下所示:
Array
(
[0] => Array
(
[username] => John
)
[1] => Array
(
[username] => Joe
)
[2] => Array
(
[username] => Jake
)
)
我希望有这个:
Array
(
[0] => John
[1] => Joe
[2] => Jake
)
我可以通过循环手动执行此操作,但有更好的方法吗?如果没有,是否可以对具有公共属性的对象数组执行此操作?
答案 0 :(得分:34)
从PHP 5.5.0开始,有一个内置函数array_column
就是这样做的。
答案 1 :(得分:30)
为什么会让事情复杂化?
foreach($array as $k=>$v) {
$new[$k] = $v['username'];
}
答案 2 :(得分:3)
$new_array = array_column($last_array, 'username');
答案 3 :(得分:3)
从PHP 5.6开始,您可以使用splat运算符。如果数组键是数字键,则可以使用以下方法:
$newArray = array_merge(...$oldArray);
答案 4 :(得分:2)
如果你使用的是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)
答案 5 :(得分:1)
对于像我这样的其他读者,如果每个内部数组的键username
不同,并且想要展平它,请使用:
call_user_func_array('array_merge', $the_array);
请注意,密钥必须不同。像这样:
[
0 => [
'a' => 1
],
1 => [
'b' => 2
]
]
运行代码后,你有这个:
[
'a' => 1,
'b' => 2,
]
答案 6 :(得分:0)
$new = array_map(create_function('$auser', 'return $auser["username"];'), $array);
如果使用对象,您只需将return $auser["username"];
更改为return $auser->get_username();
答案 7 :(得分:0)
试试这段代码:
foreach ($arr as $key => $val)
{
sort($val );
$new = array_merge($val, $new);
}
print_r ($new);
答案 8 :(得分:0)
试试这个:
$list=array();
foreach($array as $v) {
array_push($list, $v['username']);
}
答案 9 :(得分:0)
如果你不在乎钥匙:
$new_array = array();
foreach($array as $v) {
$new_array[] = $v['username']
}
答案 10 :(得分:0)
对于那些使用composer
的人:
array_column
可以使用composer install symfony/polyfill-php55
,你就可以打电话给array_column
,就像你的php5.4或更低版本一样。