使用array_map / array_walk函数进行PHP多维数组转换

时间:2012-07-18 07:14:25

标签: php multidimensional-array

我有以下多维数组:

$userList = array(
    0 => array('id' => 1000, 'first_name' => 'John', 'last_name' => 'Smith'),
    1 => array('id' => 1001, 'first_name' => 'Sam', 'last_name' => 'Johnson'),
);

我想将它转换为数组:

$userData = array(
    1000 => 'John Smith',
    1001 => 'Sam Johnson',
);

对我来说很明显如何使用foreach循环实现它,但我想知道是否可以使用像array_map或array_walk这样的PHP数组函数来实现这一点。请使用PHP 5.3作为回调函数。谢谢!

3 个答案:

答案 0 :(得分:4)

由于这些函数仅适用于数组,因此让它们在新数组中设置有点尴尬。一种方法是:

$arr = array_combine(
    array_map(function ($i) { return $i['id']; }, $arr),
    array_map(function ($i) { return "$i[first_name] $i[last_name]"; }, $arr)
);

这是foreach更合适的情况。

答案 1 :(得分:1)

功能编程的一个小技巧。

$arr = array_reduce(
  $arr,
  function ($result, $item) {
    $result[$item['id']] = $item['first_name'] . ' ' . $item['last_name'];
    return $result;
  },
  array()
);

请参阅array_reduce()

答案 2 :(得分:0)

代码:

<?php

function convertArray ( $array ) {

    $newUserList = array();
    foreach ( $array as $value ) {
        $newUserList[ $value[ 'id' ] ] = $value[ 'first_name' ] . ' ' . $value[ 'last_name' ];
    }

    return $newUserList;

}   

$userList = array(
    0 => array( 'id' => 1000, 'first_name' => 'John', 'last_name' => 'Smith' ),
    1 => array( 'id' => 1001, 'first_name' => 'Sam', 'last_name' => 'Johnson' )
);

$newUserList = convertArray( $userList );

?>

输出:

Array
(
    [1000] => John Smith
    [1001] => Sam Johnson
)