【问题标题】:How to specify array keys from a map如何从映射中指定数组键
【发布时间】:2018-06-07 10:28:49
【问题描述】:

我需要构造一个数组,该数组具有基于另一个数组的自定义键。

算法思路:

  $list = [10, 20, 30];

  $map = array_map(function ($item) {
    return [
      $item => 'banana' . time(),
    ];
  }, $list);

期望$map会是:

  [
    10 => 'banana 12345',
    20 => 'banana 12346',
    30 => 'banana 12347',
  ]

什么(显然)$map 是:

  [
    0 => [
      10 => 'banana 12345',
    ],
    1 => [
      20 => 'banana 12346',
    ],
    2 => [
      30 => 'banana 12347',
    ],        
  ]

这种情况如何指定数组键?

【问题讨论】:

  • 你有没有想过使用array_reduce?根据您的要求,似乎逻辑选择?!

标签: php arrays higher-order-functions


【解决方案1】:

使用array_fill_keys函数

$list = [10, 20, 30];
$arr = array_fill_keys($list, 'banana');

更新

$list = [10, 20, 30];

$map = array_map(function ($item) {
            return 'banana' . time();}, 
         array_fill_keys($list));

【讨论】:

  • 更新问题。实际上,每个地图应用程序的值都不相同。您的解决方案在这种情况下仍然有效吗?
  • 不,它只填充相同的值。使用通常的循环来制作数组。或者使用值创建数组并使用 array_combine
【解决方案2】:

如果我没有误解您的要求。我有几种方法。这两种方法都适合你。

第一种方法(地雷)

$keys = [10, 20, 30];
$initials = 'banana'
$time = time();
$array = array_fill_keys($keys, $initials." " .$time);
print '<pre>';
print_r($array);
print '</pre>';

输出:

Array
(
    [10] => banana 1514305494
    [20] => banana 1514305494
    [30] => banana 1514305494
)

第二种方法(你的)

$list = [10, 20, 30];
$time = time();
$map = array_map(function ($item) use ($time){
    return [$item => 'banana ' . $time];
  }, $list);

foreach(new RecursiveIteratorIterator(new RecursiveArrayIterator($map)) as $k=>$v){
    $singleDimension[$k]=$v;
}
print '<pre>';
print_r($singleDimension);
print '</pre>';

输出:

Array
    (
        [10] => banana 1514305494
        [20] => banana 1514305494
        [30] => banana 1514305494
    )

【讨论】:

  • 不,实际上我正在使用一种名为“mapWithKeys”的自定义 laravel 收集方法,它完全符合我的需要。
  • 好的。知道了。我的答案是通用的。在 SO 提问时使用正确的标签。祝你好运。
猜你喜欢
  • 2016-08-26
  • 2016-09-21
  • 1970-01-01
  • 2021-10-10
  • 2023-01-14
  • 2018-11-04
  • 2011-10-08
  • 2019-02-09
  • 2015-07-18
相关资源
最近更新 更多