【问题标题】:Add JSON array to MYSQL将 JSON 数组添加到 MYSQL
【发布时间】:2012-07-11 20:44:14
【问题描述】:

我正在尝试通过数组名称获取特定值:

<?php
$json = json_decode($_POST['json'], true);

print_r($json);
?>

我得到了这个变量:

Array
(
    [0] => Array
        (
            [name] => pav
            [value] => g
        )

    [1] => Array
        (
            [name] => ppav
            [value] => f
        )

    [2] => Array
        (
            [name] => kiekis
            [value] => g
        )

    [3] => Array
        (
            [name] => kaina
            [value] => g
        )

    [4] => Array
        (
            [name] => ppav
            [value] => f
        )

    [5] => Array
        (
            [name] => kiekis
            [value] => g
        )

    [6] => Array
        (
            [name] => kaina
            [value] => f
        )

    [7] => Array
        (
            [name] => ppav
            [value] => g
        )

)

尝试使用 foreach 函数,但无法获取特定值:

foreach ($json as $key => $value) {
    echo "name".$key['name']." value".$value['value']."<br />";
}

它打印所有数组值:

name value<br />name valueasd<br />name valueasd<br />name values<br />name values<br />name values<br />name values<br />name valuea<br />name valueasd<br />name valued<br />

但我无法按名称选择特定值添加到 nysql。该怎么做?

【问题讨论】:

  • “但我不能按名称选择特定值”
  • @H2CO3 也许我写错了语法
  • 'name''value' 都是 $value 数组中的元素,而不是始终为标量类型(整数或字符串)的 $key
  • @lanzz 我需要打印所有选定的值,例如:$value['ppav']->value;

标签: mysql arrays json


【解决方案1】:

下面是测试代码

<?php
    $json_array = array(
                    array('name'=>'pav', 'value'=>'g'),
                    array('name'=>'ppav', 'value'=>'f'),
                    array('name'=>'kiekis', 'value'=>'g'),
                    array('name'=>'ppav', 'value'=>'f')
                    );

    echo "<pre>";
    print_r($json_array);
    echo "</pre>";

    $assoc_array = array();

    for($i = 0; $i < sizeof($json_array); $i++)
    {
        $key = $json_array[$i]['name'];
        $assoc_array[$key] = $json_array[$i]['value'];
    }

    echo "<pre>";
    print_r($assoc_array);
    echo "</pre>";

    echo "assoc_array['pav'] = ".$assoc_array['pav'];
?>

代码的输出如下所示,您可以看到与您的数组完全相同的数组被转换为关联数组,这是一个问题,因为您的数组具有重复的名称,例如。 ppav 或 kiekis,因此只有 1 个 kiekis 或 ppav 索引具有最新值。

【讨论】:

  • 现在代码可以正常工作,但在循环外部它只打印最后一个值,但是如果我有几个同名的字段,在循环内部,正如我之前提到的那样,我得到item1 item1 item1 item2 item2 item2 item3 item3跨度>
  • 您不能拥有同名的多个索引。索引始终是唯一的。 您可以看到我采用与您相同的数组,使用相同的代码将该数组转换为关联数组,然后我打印它并使用它的名称访问它。代码运行良好。好吧,如果您可以将您的代码发送给我,那么我可以看到真正的问题是什么。
  • Sow 是数组时如何命名字段?我试图以其他方式获得我想要的东西,并且几乎工作了..deividas.experts.lt/code.txt 但问题是我无法获得价格价值..
  • 你的意思是$json_array[$i]['name'] == 'price'有问题
  • 是的,除此之外的所有值都在打印。开始未定义的索引
【解决方案2】:

你必须重新创建数组

$json_array = json_decode($_POST['json'], true);
$assoc_array = array();

for($i = 0; $i < sizeof($json_array); $i++)
{
     $key = $json_array[$i]['name'];
     $assoc_array[$key] = $json_array[$i]['value'];
}

之后你会得到 $assoc_array 并且你可以通过键访问它的元素。

【讨论】:

  • 那么如何通过名称获取值(假设需要获取名称为“pav”的所有值)
  • resultant $assoc_array 将类似于 $assoc_array("pav"=>"g", "ppav"=>"f", "kiekis"=>"g",等等... ...);你可以像 echo $assoc["pav"]; 一样访问它
  • 当我尝试回应它时,我得到了Undefined index: pav
  • 我会再次测试这个并会在6小时后回复您,直到那时您可以使用echo "&lt;pre&gt;"; print_r($assoc_array); echo "&lt;/pre&gt;";查看数组结果。
  • $assoc_array = array(); 在循环之外也不是 $json_array[i] 我做了 $json_array[$i]
猜你喜欢
  • 1970-01-01
  • 2014-11-11
  • 2015-04-08
  • 2017-07-14
  • 1970-01-01
  • 1970-01-01
  • 2018-07-20
  • 2016-07-30
  • 2011-09-28
相关资源
最近更新 更多