如何编辑多维关联数组中的键/值对?

Gerdi77

我希望我的标题有意义,我不太确定如何以一种镜头的方式描述我的问题,所以这里是长版本:

我正在使用 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",
    ...)
    )

我似乎不可能只用一个查询来实现这一目标。我尝试分别查询这两个表,key=>value在 T2 中重新排列并使用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];
}

也许我在这里完全错了,所以任何帮助将不胜感激 - 谢谢!

亚历克斯

如果项目参数的数量是可变的,则此表结构很好。

最简单的方法如下:

$array1 = array(...); // from table 1
$array2 = array(...); // from table 2
$result = array();
foreach ($array1 AS $v) {
    $result[ $v['itemID'] ] = $v;
}
foreach ($array2 AS $v) {
    $result[ $v['itemID'] ][ $v['specId'] ] = $v['spec'];
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章