将一个平坦的索引数组和一个平坦的关联阵列转换为带有预定义的第二级键

问题描述 投票:0回答:3

我有两个阵列。一个是颜色列表,第二个是钥匙值对的关联阵列。我的目的是从关联数组中获取钥匙值对,并使它们成为颜色数组中每个项目的子阵列。搜索如此,我遇到了各种相邻的问题,但没有我具体遇到的问题。这是两个示例数组,然后是我想实现的目标: $colors = ['#eea845', '#64A0B4', '#003c50', '#FF5568', '#eee', '#5cb85c', '#5bc0de', '#f0ad4e', '#d9534f']; $test = [ 'key1' => 'val1', 'key2' => 'val2', 'key3' => 'val3', 'key4' => 'val4', 'key5' => 'val5', 'key6' => 'val6', 'key7' => 'val7', 'key8' => 'val8', 'key9' => 'val9', ]; $final = [ '#eea845' => [ 'name' => 'key1', 'value' => 'val1', ], '#64A0B4' => [ 'name' => 'key2', 'value' => 'val2', ], etc..... ]

我一直在研究
array_walk

array_map,并试图找出如何组合forforeach循环。 I查看了此处给出的答案(将一个数组值作为键值对与另一个数组php的键配对),但是我不确定如何在已经存在的数组上使用它,并且能够获得每个数组的索引。

,例如,该解决方案使用: array_walk($array1, function(&$v, $k) use($array2) { $v['date'] = $array2[$k]; });

但是我需要将$ array2的值添加到$ array1中的已经存在的项目,而当我尝试使用

$i
是$i
是$ array1中的索引时,这是不起作用的,$ i是未定义 我很难过,不确定接下来要去哪里看。您将如何同步迭代两个阵列以构建这样的结构:

function($i, $v, $k)
对于上下文,我正在使用它来获取值以输入树枝模板,这看起来像是在问题的那一半方面做到这一点的最佳方法。

有几种做到这一点的方法。一种方法是在关联阵列上使用

return $colors[$i] => [ 'name' => $test[$key], 'value' => $test[$name] ]
,因此您可以在单独的变量中获得键和值,并使用
foreach

从第一个(索引)数组中获取相应的值:

php arrays multidimensional-array mapping merging-data
3个回答
1
投票

在您已经在

foreach ($test as $key => $value) {
    $final[current($colors)] = ["name" => $key, "value" => $value];
    next($colors);
}
上使用的罕见事件中,您必须在开始此循环之前致电
next()

我只使用以下逻辑的组合:

检查两个阵列的长度相同。
用途
$colors
走过阵列并填充最终数组。
在这一点上,我不好,但是我使用
reset($colors)

跟踪索引。您可以使用诸如

1
投票

foreach

之类的光标,但我不确定。

$count
  1. 输出
  2. next($colors)
    工作演示:
  3. Http://sandbox.onlinephpfunctions.com/code/73fb63fab8ccbdb6f73c795572ae51a0d98acdb4
  4.     
                    
    
    只要您不处理数十万个数组元素,性能可能就不会引起关注,因此不要立即打折时间复杂的方法。
    没有数组指针管理的功能方法:
    demo
current($colors)

使 @trincot的脚本较少的详细方法是调用

<?php $colors = [ '#eea845', '#64A0B4', '#003c50', '#FF5568', '#eee', '#5cb85c', '#5bc0de', '#f0ad4e', '#d9534f' ]; $test = [ 'key1' => 'val1', 'key2' => 'val2', 'key3' => 'val3', 'key4' => 'val4', 'key5' => 'val5', 'key6' => 'val6', 'key7' => 'val7', 'key8' => 'val8', 'key9' => 'val9', ]; if (count($colors) == count($test)) { $count = 0; $finalOne = array(); foreach ($test as $key => $value) { $finalOne[$colors[$count]] = [ "name" => $key, "value" => $value ]; $count++; } print_r($finalOne); } else { echo "Arrays are of not same length."; }
以从变量名称构建关联元素。 demo

Array ( [#eea845] => Array ( [name] => key1 [value] => val1 ) [#64A0B4] => Array ( [name] => key2 [value] => val2 ) [#003c50] => Array ( [name] => key3 [value] => val3 ) [#FF5568] => Array ( [name] => key4 [value] => val4 ) [#eee] => Array ( [name] => key5 [value] => val5 ) [#5cb85c] => Array ( [name] => key6 [value] => val6 ) [#5bc0de] => Array ( [name] => key7 [value] => val7 ) [#f0ad4e] => Array ( [name] => key8 [value] => val8 ) [#d9534f] => Array ( [name] => key9 [value] => val9 ) ) 我试图实现“生成器”脚本或PHP的本机“迭代”类方法的所有尝试都会产生一个丑陋/嘈杂的代码块,因此我不会提到它们。


0
投票
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.