PHP二维数组(多维数组)转换成一维数组的方法汇总
1 array_column函数法
2 array_walk函数法
3 array_map函数法
4 foreach循环法
5 array_map变种
6 array_walk_recursive函数法
1 array_column()
用PHP内置的 array_column() 函数是最简单的方法,限制是PHP版本必须是5.5.0及以上版本。
例如:
<?php
// 表示从数据库返回的记录集的数组
$records = array(
array(
'id' => 2135,
'first_name' => 'John',
'last_name' => 'Doe',
),
array(
'id' => 3245,
'first_name' => 'Sally',
'last_name' => 'Smith',
),
array(
'id' => 5342,
'first_name' => 'Jane',
'last_name' => 'Jones',
),
array(
'id' => 5623,
'first_name' => 'Peter',
'last_name' => 'Doe',
)
);
$first_names = array_column($records, 'first_name');
print_r($first_names);
?>
以上例程会输出:
Array(
[0] => John
[1] => Sally
[2] => Jane
[3] => Peter
)
2 array_walk()函数使用用户自定义函数对数组中的每个元素做回调处理,实现当前功能的方法:
$username = array();
array_walk($user, function($value, $key) use (&$username){
$username[] = $value['username'];
});
<?php
$fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple");
function test_alter(&$item1, $key, $prefix) {
$item1 = "$prefix: $item1";
}
function test_print($item2, $key){
echo "$key. $item2<br />\n";
}
echo "Before ...:\n";
array_walk($fruits, 'test_print');
array_walk($fruits, 'test_alter', 'fruit');
echo "... and after:\n";
array_walk($fruits, 'test_print');
?>
以上例输出:
Before ...:
d. lemon
a. orange
b. banana
c. apple
... and after:
d. fruit: lemon
a. fruit: orange
b. fruit: banana
c. fruit: apple
3 array_map()函数和array_walk() 作用类似,将回调函数作用到给定数组的单元上。
$username = array();
array_map(function($value) use (&$username){
$username[] = $value['username'];
}, $user);
<?php
function cube($n)
{
return ($n * $n * $n);
}
$a = [1, 2, 3, 4, 5];
$b = array_map('cube', $a);
print_r($b);
?>
这使得 $b 成为:
Array(
[0] => 1
[1] => 8
[2] => 27
[3] => 64
[4] => 125
)
例如,对于以下这个数组:
$user = array(
'0' => array('id' => 100, 'username' => 'a1'),
'1' => array('id' => 101, 'username' => 'a2'),
'2' => array('id' => 102, 'username' => 'a3'),
'3' => array('id' => 103, 'username' => 'a4'),
'4' => array('id' => 104, 'username' => 'a5'),
);
我们要提取其中的 usename 列,变成:
$username = array('a1', 'a2', 'a3', 'a4', 'a5');
4 foreach循环法
foreach循环相对上面的方法效率稍微低一些,但简单容易理解。
$username = array();
foreach ($user as $value) {
$username[] = $value['username'];
}
5 array_map变种
方法如下,意为把$user数组的每一项值的开头值移出,并获取移除的值作为新数组。注意此时新数组$username的键仍是原数组$user的键,如下。
$username = array_map('array_shift', $user);
注意:该功能会获取$user中的 id 列,而不是 username 列。
另外,如果需要获取二维数组每一项的开头列或结尾列,也可以这样做:
$username = array_map('reset', $user);
$username = array_map('end', $user);
这三个变种方法作用比较局限,仅在获取第一列或最后一列的时候有用,在复杂的数组中就难以发挥作用了。
6 array_walk_recursive函数法
用array_walk_recursive()函数就非常灵活,可以把任意维度的数组转换成一维数组。
$result = [];
array_walk_recursive($user, function($value) use (&$result) {
array_push($result, $value);
});
例如,下面这个多维数组:
$user4 = array(
'a' => array(100, 'a1'),
'b' => array(101, 'a2'),
'c' => array(
'd' => array(102, 'a3'),
'e' => array(103, 'a4'),
),
);
用这个方法后就变成:
$result = array(100, 'a1', 101, 'a2', 102, 'a3', 103, 'a4');
请先 后发表评论~