我可以使用array_map等数组函数设置数组的键

Edw*_*ove 6 php arrays iterator functional-programming array-map

我非常喜欢使用数组映射从另一个对象数组创建对象数组的函数式编程风格.

$newObjects = array_map(
  function($oldObject) {
    return new NewObject($oldObject);
  },
  $oldObjects
);
Run Code Online (Sandbox Code Playgroud)

这一切都运行正常,但我真的希望能够设置数组的索引,使它们是原始对象的id,以便于从数组中搜索和检索,但我想不出如何做其他的那么不是优雅.

$newObjects = array();
foreach ($oldObjects as $oldObject) {
  $newObjects[$oldObject->getId()] = new NewObject($oldObject);
}
Run Code Online (Sandbox Code Playgroud)

有没有办法可以做到这一点?

Ali*_*Ali 1

如果您使用 array_walk 和带有新索引的临时数组会怎样?

    $array = ['A', 'B', 'C', 'D'];
    $reIndexedTemp = [];

    array_walk(
        $array,
        function ($item, $key) use (&$reIndexedTemp) {
            // here you can have your logic to assemble your new index
            $reIndexedTemp[$key + 100] = $item;
        }
    );

    //$array = $reIndexedTemp;

    var_dump($array, $reIndexedTemp);
Run Code Online (Sandbox Code Playgroud)

输出(没有注释行):

array(4) {
  [0] =>
  string(1) "A"
  [1] =>
  string(1) "B"
  [2] =>
  string(1) "C"
  [3] =>
  string(1) "D"
}
array(4) {
  [100] =>
  string(1) "A"
  [101] =>
  string(1) "B"
  [102] =>
  string(1) "C"
  [103] =>
  string(1) "D"
}
Run Code Online (Sandbox Code Playgroud)