2009-12-09 4 views
2

J'ai un tableau multidimensionnel appelé $data qui est essentiellement des données extraites d'une table dans le tableau.du tableau multidimensionnel à mysql

Voilà comment je reçois mon tableau à l'aide 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); 

quand je fais en fait

var_dump($data); 

Je reçois ceci:

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" 
    } 
} 

J'ai aussi une table de base de données Mysql appelé seigneur de guerre

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

à partir du tableau, je veux ajouter les nouveaux utilisateurs (Thad & Bill) à la table des chefs de guerre et les mettre actifs (1)
Je veux que l'utilisateur (Thadson), qui est aussi dans le tableau, pour rester active (1)
Cependant, je veux l'utilisateur (John) qui n'est pas dans le tableau, mis à inactif (0)
et laisser admin qui n'est pas non plus dans le tableau (et est déjà inactif) inactif (0)

Je sais que c'est une question très débutants, mais comment puis-je faire cela?

Merci

+0

Pouvez-vous nous montrer le code de la matrice? le var_dump n'est pas très lisible. –

+0

ou formater le var_dump pour qu'il soit lisible – Amarghosh

+0

John * is * dans le tableau ... – Greg

Répondre

2

Vous pouvez utiliser array_map fonction pour définir une fonction de rappel pour le multi-gamme et traiter en conséquence:

array_map

0

j'ai vu et je l'avoir essayé:

$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') "; 

... pour obtenir les données dans ma table

J'ignore les 2èmes éléments du tableau (Ceux qui ressemblent à ceci: [1] => string (7) "user = 91") et j'essaie d'insérer les éléments [2] et [0] dans la table et rendre les nouveaux utilisateurs actifs en plaçant 1 dans le champ actif.

Cela évidemment ne fait pas tout ce dont j'ai besoin (en fait il n'en fait pas) et je n'ai aucune idée de ce que je fais. C'est pourquoi je demande de l'aide.

0

Si je devais aborder cette question, je voudrais tout d'abord essayer d'organiser mes tableaux (le tableau $data et aussi le tableau de la base de données) dans un format similaire (éventuellement en utilisant la id comme la clé du tableau) pour que je puisse utiliser array_intersect pour travailler les gens dans les deux $data et $database (ie. les personnes qui devraient mettre en activité) et array_diff travailler les personnes $data et pas dans $database (ie. les personnes qui ont besoin d'être ajouté à la base de données) et puis array_diff encore (avec $database d'abord cette fois) pour travailler les gens dans $database et t dans $data (ie. les personnes qui devraient être inactives).

J'espère que cela vous mettra sur la piste d'écriture. Désolé mais je n'ai pas le temps d'écrire le code pour vous.

Questions connexes