Versio

array_diff hulp nodig

Overzicht Reageren

Chris visser

chris visser

17/12/2008 23:45:00
Quote Anchor link
Hey ik ben bezig met een script waarbij mappen automatisch worden opgezocht en deze worden dan in een database gezet. met scandir maak ik een array voor de mappen en een andere array komt van een database tabel. Aan de hand van de informatie uit mijn database en de array van mijn mappen wil ik kijken of een map al bestaat of niet:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<?php
  $sql
= "SELECT * FROM core_modules";
  if(!$Smodules = $mysqli->query($sql))
  {

    trigger_error('Fout in query: '.$mysqli->error);    
  }
    
  else
  {    
      $ModulesInDB = array();
    while($module = $Smodules->fetch_assoc())
    {

          array_push($ModulesInDB, $module);
    }
  }


    
  $array_modules = array();
  $modules = scandir("modules");
    $i = 0;
    foreach($modules AS $scankey => $scanvalue)
    {

      if(($scanvalue != ".") && ($scanvalue != ".."))
        {

          if(!is_dir($scanvalue))
            {
        
                $array_modules[$i] = $scanvalue ;
                $i++;
            }
        }
  }

    


$i = 0;
$result = array();
foreach($ModulesInDB AS $DBkey => $DBvalue)
{

  $result[$i] = array_diff($array_modules, $DBvalue);
    $i++;
}


foreach($result AS $key => $value)
{

  echo $value;
}

?>


Ik krijg het niet voor elkaar om de array's zodanig te strippen dat de waardes uit de beide array's met elkaar vergeleken kunnen worden. Het is dus de bedoeling dat Het script moet kunnen zien of een bestand al bestaat of juist nog toegevoegt moet worden aan de database.

Alvast bedankt voor de hulp
 
PHP hulp

PHP hulp

17/05/2012 12:39:46
Gesponsorde koppelingen:
BHosted Hosting al vanaf € 1,- per maand

Controleer nu gratis jouw domeinnaam:

  
 
Jesper Diovo

Jesper Diovo

17/12/2008 23:48:00
Quote Anchor link
Effe iets anders: je zet in $array_modules alles wat géén map is?

Voer voor je eennalaatste foreach eens dit uit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
var_dump($ModulesInDB);
var_dump($array_modules);
?>

Kijken wat daar uit komt.
Gewijzigd op 01/01/1970 01:00:00 door Jesper Diovo
 
Chris visser

chris visser

18/12/2008 06:56:00
Quote Anchor link
Situatie tijdens uitvoeren:
-2 mappen geindexeerd in database
-modulemappen in modulemap

na uitvoering krijg ik dit:

array(2) { [0]=> array(5) { ["ModuleID"]=> string(2) "12" ["ModuleMap"]=> string(4) "home" ["CustomName"]=> string(4) "home" ["Active"]=> string(0) "" ["View"]=> string(0) "" } [1]=> array(5) { ["ModuleID"]=> string(2) "13" ["ModuleMap"]=> string(7) "members" ["CustomName"]=> string(7) "members" ["Active"]=> string(0) "" ["View"]=> string(0) "" } } NULL ArrayArray
 
Robert Deiman

Robert Deiman

18/12/2008 07:23:00
Quote Anchor link
@Chris

Als ik het goed begrijp heb jij 2 arrays:

1. Met mappen die op je server staan (incl. nieuw toegevoegde)
2. Met mappen die reeds in je database zijn opgeslagen

-> Je kan met 1 foreach dan zorgen dat de mappen uit array 1 toegevoegd worden:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php

foreach($array1 as $key=> $value){
    if(!in_array($value,$array2){
       //de map staat nog niet in de database, dus toevoegen.
       }
    }

?>


array1 zijn de mappen die je inleest, en array2 zijn de gegevens die je uit je database in een array zet.
Gewijzigd op 01/01/1970 01:00:00 door Robert Deiman
 
Chris visser

chris visser

18/12/2008 12:44:00
Quote Anchor link
Ja dat is wat ik ook geprobeerd heb. Als ik de onderstaande code gebruik krijg ik: array( ) te zien.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
//$ModulesInDB is de database array.
foreach($array_modules AS $mapkey => $mapvalue)
{

  if(!in_array($mapvalue, $ModulesInDB)
  {

    echo $mapvalue;
}

?>


Omdat de bovenstaande code (volgens mij) zegt dat $ModulesInDB een multidimensionale array is ( array[array[]] ) probeerde ik het volgende:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
//$ModulesInDB is de database array.
foreach($array_modules AS $mapkey => $mapvalue)
{

  if(!in_array($mapvalue, $ModulesInDB['ModuleMap'])
  {

    echo $mapvalue;
  }
}

?>


Hierbij heb ik een key aangegeven in de $ModulesInDB array, maar dan geeft hij een foutmelding welke ik op dit moment niet kan sturen omdat ik op een andere pc zit. Ik zal de foutmelding over 2 uur wel even opsturen.
Gewijzigd op 01/01/1970 01:00:00 door chris visser
 



Overzicht Reageren

Get Adobe Flash player