2009-12-09 109 views
2

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

这是我如何得到使用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数据库表所谓的军阀

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); 

从阵列中,我希望将新用户(萨德&草案)添加到军阀表,并设置其活动状态(1)
我希望用户(Thadson),谁也数组中,留(1)
但是,我想要不在阵列中的用户(John)设置为不活动(0)
并且使管理员也不在阵列中(并且已经处于非活动状态)不活动(0)

我知道这是一个很初级的问题,但我怎么做到这一点?

感谢

+0

你能告诉我们数组的代码吗? var_dump不太可读。 – 2009-12-09 10:53:08

+0

或格式var_dump,使其可读 – Amarghosh 2009-12-09 10:58:31

+0

约翰*是在数组中... – Greg 2009-12-09 10:59:52

回答

2

您可能需要使用array_map功能可为多阵列的回调函数,并进行相应的处理:我看到这个

array_map

0

,我已经尝试过了:

$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放入活动字段中。

这显然没有做我需要的一切(实际上它没有做任何),我不知道我在做什么。这就是我寻求帮助的原因。

0

如果我要解决这个问题,我会首先尝试将我的阵列($data阵列和数据库中的阵列)组织成类似的格式(可能使用id作为数组键),以便我可以使用array_intersect制定出人都$data$database(谁应该设置为活动即人)和array_diff$data$database摸出人(即需要被添加到数据库中谁的人)和然后再次array_diff(此时第一次使用$database)来计算$database中的人员no吨$data(即。应该被设置为不活动的人)。

希望这可以帮助你把你写在轨道上。对不起,但我没有时间为你编写代码。