2

我有以下多维数组:

$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。谢谢!

4

3 回答 3

4

由于这些函数只对数组values起作用,让它们在新数组中设置有点尴尬。一种方法是:

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

这是一个foreach更合适的情况。

于 2012-07-18T07:20:15.883 回答
1

函数式编程的一个小技巧。

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

array_reduce()

于 2012-07-18T07:22:34.233 回答
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
)
于 2012-07-18T07:32:25.653 回答