从阵列中正确提取数据以进行存储

时间:2018-05-17 01:35:53

标签: php mysql foreach

在下面的数组中,我试图提取每种服装类型和第一个" a"和" b"来自"结果"的值数组,然后存储" a"和" b"值到我数据库中的服装类型列。

输出的阵列结构如下

Array ( [0] =>
{
    "error": [],
    "result": {
        "shirts": {
            "a": [
                "12",
                "6",
                "6.000"
            ],
            "b": [
                "91",
                "1",
                "1.000"
            ]
        },
        "pants": {
            "a": [
                "41",
                "3",
                "3.000"
            ],
            "b": [
                "55",
                "30",
                "30.000"
            ]
        }
    }
}
)

所以数据应该是这样的:将12插入到a列中的衬衫类型列和b列中的91,并将41插入到a列中的裤型列和b列中的55.

这个foreach循环在哪里出错?

foreach($result['result'] as $clothing) {
        $query = 'UPDATE `clothing` SET `a`='.$clothing["a"].' AND SET `B`='.$clothing["a"].' WHERE `type`="'.$clothing[0].'"';
        $result = db_query($query);
}

2 个答案:

答案 0 :(得分:0)

第一个问题是您的JSON中存在错误,, b数组之后的shirts更多$clothing。假设你修复了这个问题,那么这段代码会显示你在$result = json_decode($json[0], true); foreach($result['result'] as $clothing) { print_r($clothing); } 中得到的内容(参见答案的底部)。

UPDATE

正如您所看到的,阵列中没有任何一种衣服。因此,您需要更改foreach循环以访问该值。您的AND SET查询语法也存在问题,不需要foreach($result['result'] as $type => $values) { $query = 'UPDATE `clothing` SET `a`='.$values["a"][0].', `B`='.$values["b"][0].' WHERE `type`="'.$type.'"'; $result = db_query($query); } 。所以基于这个和你的要求,你的foreach循环应该是:

Array
(
    [a] => Array
        (
            [0] => 12
            [1] => 6
            [2] => 6.000
        )
    [b] => Array
        (
            [0] => 91
            [1] => 1
            [2] => 1.000
        )
)
Array
(
    [a] => Array
        (
            [0] => 41
            [1] => 3
            [2] => 3.000
        )
    [b] => Array
        (
            [0] => 55
            [1] => 30
            [2] => 30.000
        )
)

输出:

file

答案 1 :(得分:0)

你很接近,当你使用$clothing["a"]时,你实际上得到了整个“a”数组,而不仅仅是你想要的值。

从我可以告诉你要写的查询是

foreach($result['result'] as $key => $clothing){
    $query = 'UPDATE `clothing` SET `a`='.$clothing["a"][0].', 
    `B`='.$clothing["b"][0].' WHERE `type`="'.$key.'"';
    $result = db_query($query);
}

所以在这里,$ key是对象中每个元素的关键,即:衬衫,裤子

$服装是衬衫和裤子的价值,即:阵列,“a”,“b”

所以$ clothing [“a”]选择“a”然后$ clothing [“a”] [0]选择“a”的第一个值,我们使用与“b”相同的原则。您可以通过更改第二个括号[“a”] [1],[“b”] [2]

中的值来选择其他数据“a”/“b”

希望这有助于明确这一点