【发布时间】:2018-08-31 18:17:46
【问题描述】:
我希望我的标题有意义,我不太清楚如何描述我的问题,所以这里是长版本:
我正在使用 PHP,我有 2 个 MySQL 表显示项目及其规格(我无法更改表结构)。
T1(物品)
+---------+--------+
| itemID | item |
+---------+--------+
| 1 | TV |
| 2 | Radio |
| 3 | Camera |
| ... | ... |
+---------+--------+
T2(规格)
+---------+--------+------+
| itemID | specID | spec |
+---------+--------+------+
| 1 | color | red |
| 1 | weight | 10 |
| 1 | price | 499 |
| 2 | color | blue |
| ... | ... | ... |
+---------+--------+------+
我想要一个像这样的多维关联数组
array(
[0]=> array(
"itemID"=>"1",
"item"=>"TV",
"color"=>"red",
"weight"=>"10",
"price"=>"499")
[1]=> array(
"itemID"=>"2",
"item"=>"Radio",
"color"=>"blue",
...)
)
在我看来,只用一个查询就不可能做到这一点。
我尝试分别查询这两个表,重新排列T2中的key=>value并使用array_merge。
我目前拥有的是来自 T1 的数组
array(
[0]=> array(
"itemID"=> "1",
"item"=>"TV")
[1]=> array(
"itemID"=> "2",
"item"=>"Radio")
[2]=> array(
"itemID"=> "3",
"item"=>"Camera")
...)
从 T2 开始,数组以相同的形式出现
array(
[0]=> array(
"itemID"=> "1",
"specID"=> "color",
"spec"=>"red")
[1]=> array(
"itemID"=> "1",
"specID"=> "weight",
"spec"=>"10")
[2]=> array(
"itemID"=> "1",
"specID"=> "price",
"spec"=>"499")
...)
更改数组后,我将得到一个数字数组,而不是我想要的两个关联数组
array(
[0]=> array(
[0] => ["itemID" => "1","color" => "red","weight" => "10", "price" => "499"])
[1]=> array(
[0] => ["itemID" => "2","color" => "blue",...])
...)
我的代码是
$newArray = array();
for ($i = 0; $i<=n; $i++) {
foreach($oldArray[$i] as $key => $value) {
if ($key === 'itemID') {
$a = $key . '" => "' . $value . '",';
}
elseif($key === 'specID') {
$b = '"' . $key . '" => "';
}
elseif($key === 'spec') {
$c = $value;
}
}
$newArray[] = [$a.$b.$c];
}
也许我在这里完全错了,所以任何帮助将不胜感激 - 谢谢!
【问题讨论】:
-
似乎您需要的是 SQL 中的 JOIN。尝试根据 itemID 加入您的两个表。 w3schools.com/sql/sql_join.asp
-
JOIN 只有在每个项目的规格数量不变的情况下才有效。如果它变化,或者如果
specID可以变化,那就不方便了。
标签: php mysql multidimensional-array associative-array key-value