Comment fusionner deux tableaux sans valeurs dupliquées en php?

j'ai deux tableaux: 1. chaque objet ici est une ligne extraite de la base de données.

    array
      1 => 
        object(stdClass)[41]
          public 'id' => string '1' (length=1)
          public 'class_id' => string '25' (length=2)
          public 'section_id' => string '2' (length=1)
          public 'student_id' => string '1' (length=1)
          public 'date' => string '2011-11-27' (length=10)
          public 'attendance' => string 'present' (length=7)
2 => 
        object(stdClass)[41]
          public 'id' => string '1' (length=1)
          public 'class_id' => string '25' (length=2)
          public 'section_id' => string '2' (length=1)
          public 'student_id' => string '3' (length=1)
          public 'date' => string '2011-11-27' (length=10)
          public 'attendance' => string 'present' (length=7)

2. Un autre tableau est de ma forme et cela ressemble à ceci.

array
  0 => 
    array
      'class_id' => string '25' (length=2)
      'section_id' => string '2' (length=1)
      'student_id' => int 1
      'date' => string '2011-11-27 00:00:00' (length=19)
      'attendance' => string 'present' (length=7)
  1 => 
    array
      'class_id' => string '25' (length=2)
      'section_id' => string '2' (length=1)
      'student_id' => int 2
      'date' => string '2011-11-27 00:00:00' (length=19)
      'attendance' => string 'present' (length=7)

Voici ce que je veux faire c'est:

- comparez les deux et vérifiez si les clés student_id et date sont déjà dans la base de données ou pas.

- et à partir du second tableau qui est à partir des données de la forme, supprimer dupliquer et insérer dans les données.

Le résultat final devrait être:

array
  0 => 
    array
      'class_id' => string '25' (length=2)
      'section_id' => string '2' (length=1)
      'student_id' => int 2
      'date' => string '2011-11-27 00:00:00' (length=19)
      'attendance' => string 'present' (length=7)
17
demandé sur kamal 2011-11-28 09:58:58

3 réponses

Essaie:

$c = [array_merge][1]($a,$b);

var_dump([array_unique][1]($c));

j'Espère que ça aide

26
répondu Sudhir Bastakoti 2015-10-26 13:20:22

en complétant L'anwer de DemoUser, en plaçant le tri de drapeau régulier comme un argument a résolu mon problème" tableau de conversion en chaîne":

$c = array_merge($a,$b);

$d = array_unique($c, SORT_REGULAR);

var_dump($d);
5
répondu user3590539 2015-11-13 10:27:35

puisque vos tableaux (base de données et forme) sont exactement la même chose vous ne pouvez pas appeler les fonctions array_merge ou array_unique. Vous devrez itérer les lignes de la base de données une fois et stocker les valeurs retournées dans un tableau séparé basé sur les valeurs des clés (Map). Et puis itérer à travers votre tableau retourné de forme et rechercher le tableau préparé précédemment pour la clé et si trouvé juste supprimer cet élément du tableau retourné de forme. Envisager l'extrait de code suivant pour ceci:

// assuming database returned rows are in $rows array
// assuming form returned records are in $forms array

$dbArray = array();
foreach($rows as $r) {
   // need to convert string to int and string to date to match data in both sets
   $dbArray[ array( (int) $r->student_id, strtotime($r->date) ) ] = 1;
}

$diffArray = array();
foreach($forms as $f) {
   $key = array( $f['student_id'], strtotime($f['date']) );
   if (!array_key_exists($key, $dbArray))
      $diffArray[] = $f;
}

// now $diffArray will have the final result you're looking for
1
répondu anubhava 2011-11-28 07:32:52