我有4个数组,第一个是表格标题,其中有六个:
array(6) {
[0]=> string(3) "Who",
[1]=> string(4) "What",
[2]=> string(4) "When",
[3]=> string(5) "Where",
[4]=> string(3) "Why",
[5]=> string(3) "How"
}
和其他3个包含重合值的数组。我想要做的是取第一个数组的值是使它们成为另一个数组的键,其值为array
,如下所示:
array(6) {
["Who"]=> array(0) {},
["What"]=> array(0) {},
["When"]=> array(0) {},
["Where"]=> array(0) {},
["Why"]=> array(0) {},
["How"]=> array(0) {}
}
然后使用重合值填充这些数组,就像表一样。其他一个数组的一个例子是:
array(6) {
[0]=> string(3) "red",
[1]=> string(4) "blue",
[2]=> string(4) "green",
[3]=> string(6) "yellow",
[4]=> string(3) "black",
[5]=> string(3) "white"
}
为了简单起见,我要说所有3个数组都具有与上面完全相同的值。
最后我希望得到的数组是:
array(6) {
["Who"]=> array(3) {
[0]=> string(3) "red",
[1]=> string(3) "red",
[2]=> string(3) "red"
},
["What"]=> array(3) {
[0]=> string(4) "blue",
[1]=> string(4) "blue",
[2]=> string(4) "blue"
},
["When"]=> array(3) {
[0]=> string(5) "green",
[1]=> string(5) "green",
[2]=> string(5) "green"
},
["Where"]=> array(3) {
[0]=> string(6) "yellow",
[1]=> string(6) "yellow",
[2]=> string(6) "yellow"
},
["Why"]=> array(3) {
[0]=> string(5) "black",
[1]=> string(5) "black",
[2]=> string(5) "black"
},
["How"]=> array(3) {
[0]=> string(5) "white",
[1]=> string(5) "white",
[2]=> string(5) "white"
}
}
我目前使用的代码如下:
... //Tokens are generated above (this is all in a loop)
foreach ($tokens as $token) {
if ($i == 0) {
$table[$token] = array();
} else {
foreach ($table as $col) {
$table[$col][$i] = $token;
}
}
}
$i = $i + 1;
所有这些生成都是array(0) {}
如果有人能指出我的逻辑缺陷,我们将不胜感激。
编辑:
这是表格的样子:
_________________________________________
| Who | What | When | Where | Why | How |
-----------------------------------------
| red | blue | green| yellow|black|white|
-----------------------------------------
| red | blue | green| yellow|black|white|
-----------------------------------------
| red | blue | green| yellow|black|white|
-----------------------------------------
答案 0 :(得分:0)
我对你的问题得出了一个结论,如下所示:
这只是为了构建类似于你的数组
$one = array(
0 => 'Who',
1 => 'What',
2 => 'When',
3 => 'Where',
4 => 'Why',
5 => 'How'
);
$der = array();
for ($i = 0; $i < 3; $i++) {
$array = array(
0 => 'red',
1 => 'blue',
2 => 'green',
3 => 'yellow',
4 => 'black',
5 => 'white'
);
array_push($der, $array);
}
我基本上创建了一个多维数组($der
),而不是您必须完成此任务的3个单独的数组值。
您可以使用array_push()
创建新阵列。
现在我们需要循环遍历$der
数组,同时保留$one
数组中的键(表标题)。
$new = array();
foreach($der as $item) {
foreach($item as $key => $val) {
$new[$one[$key]][] = $val;
}
}
print_r($new)
保证返回:
Array
(
[Who] => Array
(
[0] => red
[1] => red
[2] => red
)
[What] => Array
(
[0] => blue
[1] => blue
[2] => blue
)
[When] => Array
(
[0] => green
[1] => green
[2] => green
)
[Where] => Array
(
[0] => yellow
[1] => yellow
[2] => yellow
)
[Why] => Array
(
[0] => black
[1] => black
[2] => black
)
[How] => Array
(
[0] => white
[1] => white
[2] => white
)
)
正如您在循环中看到的,我们引用$one[$key]
,其中$key
是您正在迭代的数组项的当前索引。
您可以执行以下操作(注意:下面的$one
与上面的$one
相同):
$values = array();
foreach ($der as $item) {
foreach ($item as $key => $val) {
$values[$key][] = $val;
}
}
现在可以使用array_combine()
来完成:
$new = array_combine($one, $values);
这将保证与上述相同的输出。
答案 1 :(得分:0)
尝试array_fill_keys()函数
$tokens= array('Who', 'What', 'When', 'Where', 'Why', 'How');
$table = array('red', 'blue', 'green', 'yellow','black', 'white');
$a = array_fill_keys($tokens, $table);
print_r($a);