我有两个阵列。一个是颜色列表,第二个是钥匙值对的关联阵列。我的目的是从关联数组中获取钥匙值对,并使它们成为颜色数组中每个项目的子阵列。搜索如此,我遇到了各种相邻的问题,但没有我具体遇到的问题。这是两个示例数组,然后是我想实现的目标:
$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,并试图找出如何组合for和foreach循环。 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
从第一个(索引)数组中获取相应的值:
在您已经在
foreach ($test as $key => $value) {
$final[current($colors)] = ["name" => $key, "value" => $value];
next($colors);
}
上使用的罕见事件中,您必须在开始此循环之前致电next()
。
我只使用以下逻辑的组合:检查两个阵列的长度相同。
用途
$colors
走过阵列并填充最终数组。 在这一点上,我不好,但是我使用
reset($colors)
跟踪索引。您可以使用诸如foreach
之类的光标,但我不确定。
$count
next($colors)
工作演示:只要您不处理数十万个数组元素,性能可能就不会引起关注,因此不要立即打折时间复杂的方法。
没有数组指针管理的功能方法: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的本机“迭代”类方法的所有尝试都会产生一个丑陋/嘈杂的代码块,因此我不会提到它们。