【问题标题】:How to Store Multidimensional Array in Mysql Using PHP如何使用 PHP 在 Mysql 中存储多维数组
【发布时间】:2011-10-23 10:02:18
【问题描述】:

您好,我有一个由用户订购的服务数组,如下所示 $_POST 打印值

Array
(
[compaignID] => 4
[totalChecked] => 3
[hear_about_us] => Google
[videolink] => 
[LinkedIn] => Array
    (
        [0] => 1
        [1] => 1
        [2] => http://developer.comoj.com
    )

[Facebook] => Array
    (
        [0] => 
        [1] => 
    )

[Twitter] => Array
    (
        [0] => 
        [1] => 
    )

[YouTube] => Array
    (
        [0] => 2
        [1] => 4
        [2] => http://developer.comoj.com
    )

[Coupon_Area] => Array
    (
        [0] => 
        [1] => 
    )

[Website] => Array
    (
        [0] => 
        [1] => 
    )

[Google_Map] => Array
    (
        [0] => 
        [1] => 
    )

[Email] => Array
    (
        [0] => 3
        [1] => 8
        [2] => http://developer.comoj.com
    )

[Share_To_Social_Media] => Array
    (
        [0] => 
        [1] => 
    )

[btnSubmit] => Submit
)

我很困惑如何存储这些。我以 php 形式制作了这些数组,以使它们的组如下所示

订单输入字段

<input name="<?php echo $service; ?>[]" type="text" id="order<?php echo $service; ?>" size="4">

用于服务复选框以检查要使用的服务

<input name="<?php echo $service; ?>[]" type="checkbox" id="show<?php echo $service; ?>" value="<?php echo $serviceID; ?>" onclick="countChecked();">

对于服务 WebURL,下面的输入字段如

<input name="<?php echo $service; ?>[]" type="text" id="<?php echo $service; ?>" size="40">

我很困惑如何仅获取具有值的数组并仅存储这些服务的订单号,例如显示升序或降序以及针对每个选中复选框的 webrurl。

我很困惑如何循环并存储在 mysql 中。

请帮帮我。

非常感谢

【问题讨论】:

  • 这完全取决于表的结构。发布一些架构,也许我们可以为您提供帮助。
  • 我的表如下 SQL CREATE TABLE tbl_page_links` (pageLinkID bigint(20) NOT NULL AUTO_INCREMENT, compaignID bigint(20) NOT NULL, serviceID tinyint(4) NOT NULL , webaddress text NOT NULL, sorder tinyint(4) NOT NULL DEFAULT '0', isActive tinyint(4) NOT NULL DEFAULT '0', 主键 (pageLinkID) ) ENGINE=MyISAM AUTO_INCREMENT=19默认字符集=latin1`

标签: php mysql loops


【解决方案1】:

您可以借助 PHP 的 json_encode()json_decode() 函数来解决这些问题。

要存储和数组到mysql,你应该使用json_encode($yourArray);,你应该将返回的字符串存储到mysql

与检索类似,您应该使用json_decode($yourMySqlStoredString),这会将数组返回给您,您可以将其用于进一步的操作!

json_encode php function

json_decode php function

【讨论】:

  • +1 获得超棒的创意解决方案。如果可以的话,我会再给你 4 个。干得好。
  • -1 糟糕的想法。与其将序列化数据推送到 RDBMS 中,不如调整架构以适合数据。
  • 如果我尝试 PHP Serialize() & Unserialize();哪个更好,更容易处理。也足够快。
  • 我已经阅读了这个问题。听起来 OP 想要拥有多个一对多的关系;不应该使用序列化来处理(例如:使用json或php的内置serialize()
  • 无论 OP 是否认为它“会起作用”,我们都应该建议他或她不要使用不良的编码做法(例如:将序列化数据插入 RDBMS)
【解决方案2】:

我相信使用serialize()unserialize()函数比使用json_encode()json_decode()更好

原因很简单:Serialize 将多维(字符串)索引数组编码为字符串,而 unserialize 能够返回相同的数组(原始数组格式),这与 json_encode 和 json_decode 函数的组合返回具有数组属性的对象不同。

嗯,这根本不是“程序员友好”。

原始数组:

Array(
[prvni] => Array
    (
        [druhy] => Array
            (
                [0] => a
                [1] => b
                [2] => c
                [3] => d
                [4] => e
                [5] => f
            )
    )

[prvnidruhy] => Array
    (
        [0] => 1
        [1] => 2
        [2] => 3
        [3] => 4
        [4] => 5
    )
)

json_encode:

{"prvni":{"druhy":["a","b","c","d","e","f"]},"prvnidruhy":[1,2,3,4,5]}

json_decode:

object(stdClass)[1]
 public 'prvni' => 
  object(stdClass)[2]
   public 'druhy' => 
    array (size=6)
      0 => string 'a' (length=1)
      1 => string 'b' (length=1)
      2 => string 'c' (length=1)
      3 => string 'd' (length=1)
      4 => string 'e' (length=1)
      5 => string 'f' (length=1)
   public 'prvnidruhy' => 
    array (size=5)
      0 => int 1
      1 => int 2
      2 => int 3
      3 => int 4
      4 => int 5

序列化:

a:2:{s:5:"prvni";a:1:{s:5:"druhy";a:6:{i:0;s:1:"a";i:1;s:1:"b";i:2;s:1:"c";i:3;s:1:"d";i:4;s:1:"e";i:5;s:1:"f";}}s:10:"prvnidruhy";a:5:{i:0;i:1;i:1;i:2;i:2;i:3;i:3;i:4;i:4;i:5;}}

反序列化:

array (size=2)
 'prvni' => 
    array (size=1)
 'druhy' => 
    array (size=6)
      0 => string 'a' (length=1)
      1 => string 'b' (length=1)
      2 => string 'c' (length=1)
      3 => string 'd' (length=1)
      4 => string 'e' (length=1)
      5 => string 'f' (length=1)
 'prvnidruhy' => 
    array (size=5)
      0 => int 1
      1 => int 2
      2 => int 3
      3 => int 4
      4 => int 5

【讨论】:

    【解决方案3】:

    但是您可以使用json_decode($data, true) 获得一个简单的关联数组。 来自documentation

    当为 TRUE 时,返回的对象将被转换为关联数组。

    【讨论】:

    • 感谢frostnational的点评,我不是很踏实!
    【解决方案4】:

    此答案基于您的上一条评论。您需要遍历数组并插入每个值。暂定...

    foreach ($array AS $v) {
    $sql = "INSERT INTO `tbl_page_link` (serviceID, sorder, webaddress) VALUES ($v[0], $v[1], '$v[2]')";
    mysql_query($sql);
    }
    

    【讨论】:

      猜你喜欢
      • 2011-04-05
      • 2016-05-12
      • 2017-06-01
      • 2010-10-27
      • 2011-07-26
      • 1970-01-01
      • 2017-03-30
      • 2011-09-12
      • 2013-09-04
      相关资源
      最近更新 更多