【问题标题】:from multi dimensional array to MySQL从多维数组到 MySQL
【发布时间】:2010-12-24 18:58:15
【问题描述】:

我有一个名为$data 的多维数组,它基本上是从表中提取到数组中的数据。

这就是我使用 JS_extractor 获取数组的方式:

set_include_path(get_include_path() . PATH_SEPARATOR . './library/');
require_once 'JS/Extractor.php';
$extractor = new JS_Extractor(file_get_contents('temp.html'));

$body = $extractor->query("body")->item(0);

$table = $body->query("//table[@class='rstatisztika_tabla']")->item(0);

$data = array();
foreach ($table->query('tr') as $i => $tr) {
    if ($i == 0) {
        continue;
    }
    $a = $tr->query('.//a');
    $a = $a->item($a->length - 1);
    $url = $a->getAttribute('href');
    $parsed = parse_url($url);
    parse_str($parsed['query'], $query);
    $data[] = array(
        $a->textContent,
        $url,
        $query['user'],
    );
}
//var_dump($data);

当我真的这样做时

var_dump($data);

我明白了:

array(3)
{
    [0]=> array(3)
    {
        [0]=> string(4) "Thad"
        [1]=> string(7) "http://localhost/index.php?m=karakterlap&user=91"
        [2]=>  string(2) "91"
    }
    [1]=> array(3)
    {
        [0]=> string(4) "Bill"
        [1]=> string(8) "http://localhost/index.php?m=karakterlap&user=110"
        [2]=> string(3) "110"
    }
    [2]=> array(3)
    {
        [0]=> string(7) "Thadson"
        [1]=> string(7) "http://localhost/index.php?m=karakterlap&user=147"
        [2]=> string(3) "147"
    }
}

我还有一个Mysql数据库表叫warlord

CREATE TABLE IF NOT EXISTS `warlord` (
  `id` int(5) NOT NULL default '0',
  `name` varchar(35) character set utf8 NOT NULL default '',
  `active` tinyint(1) NOT NULL default '1',
  UNIQUE KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

INSERT INTO `warlord` (`id`, `name`, `active`) VALUES
(2, 'Admin', 0), (100, 'Thadson', 1), (147, 'John', 1);

从数组中,我想将新用户(Thad 和 Bill)添加到军阀表中并将它们设置为活动 (1)
我希望同样在数组中的用户 (Thadson) 保持活动状态 (1)
但是我希望不在数组中的用户 (John) 设置为非活动 (0)
并让不在数组中(并且已经处于非活动状态)的管理员处于非活动状态(0)

我知道这是一个非常初学者的问题,但我该怎么做呢?

谢谢

【问题讨论】:

  • 你能告诉我们数组的代码吗? var_dump 的可读性不是很好。
  • 或格式化 var_dump 使其可读
  • 抱歉,John 不应该在数组中。现在已经修好了……
  • 顺便说一句,谁修好了我的阵列,所以它看起来不错且可读,谢谢!!!
  • 我添加了如何按要求获取数组的代码。

标签: php mysql multidimensional-array


【解决方案1】:

如果我要解决这个问题,我会首先尝试将我的数组($data 数组以及数据库中的数组)组织成类似的格式(可能使用id 作为数组键),以便我可以使用array_intersect 计算出$data 和$database 中的人(即应该设置为活动的人)和array_diff 计算出$data 和不 中的人> 在$database(即需要添加到数据库中的人)然后再次array_diff(这次首先是$database)来计算$database 中的人并且不是 在$data 中(即应该设置为非活动的人)。

希望这有助于您进入写作轨道。抱歉,我没有时间真正为您编写代码。

【讨论】:

    【解决方案2】:

    我看到了,我试过了:

    $data = array();
    for($i=0; $i<count($data_array); $i++){
      $data_items[$i] = explode(',', $data_array[$i]);   // create a multi-dimensional array
      $data[] = '( ' .$data_items[$i][2]. ', '.$data_items[$i][0]. ', '. 1 .')';
    }
    
    $sql = "INSERT INTO warlord(id, name, active) VALUES ('".$data_items[$i][2]."','".$data_items[$i][0]."','1') ";
    

    ...将数据放入我的表中

    我忽略了数组中的第二个元素(看起来像这样的元素:[1]=> string(7) "user=91"),我尝试将元素 [2] 和 [0] 插入到表中并通过将 1 放入活动字段来使新用户处于活动状态。

    这显然不能满足我的所有需求(实际上它并没有做任何事情)而且我不知道自己在做什么。这就是我寻求帮助的原因。

    【讨论】:

      【解决方案3】:

      您可能希望使用 array_map 函数为多数组设置回调函数并进行相应处理:

      array_map

      【讨论】:

        猜你喜欢
        • 2014-04-19
        • 1970-01-01
        • 2015-11-04
        • 1970-01-01
        • 2016-05-29
        • 2011-01-26
        • 2016-02-10
        • 1970-01-01
        • 2012-02-08
        相关资源
        最近更新 更多