2016-06-29 16 views
1

Heute habe ich ein paar Probleme damit, ein paar Dinge in PHP herauszufinden. Da ich normalerweise dazu tendiere, etwas zu wandern, werde ich versuchen, meine Frage kurz, aber prägnant zu halten. Hier ist, was ich versuche zu tun.PHP - Zwei mehrdimensionale Arrays komparieren und an ein Array anhängen

Array # 1 ist ein mehrdimensionales Array, das die Ergebnisse der MySQL-Abfrage enthält, die für eine Benutzertabelle in der Datenbank ausgeführt wird. Es würde aussehen, als solche:

Array ([0] => Array ([id] => 79 [firstname] => John [lastname] => Doe [province] => Province [email] => [email protected] [primaryphone] => 123-456-7890) [1] => Array ([id] => 113 [firstname] => Jane [lastname] => Doe [province] => Province [email] => [email protected] [primaryphone] => 123-456-7890)) 

Array # 2 ist ein weiteres mehrdimensionales Array die Ergebnisse aus einer MySQL-Abfrage für eine Mitgliedschaft Tabelle in der Datenbank durchgeführt enthält, die die ID des Benutzers enthält, die mit der aktuellen Gruppe zugeordnet ist. Es sieht aus wie folgt:

Array ([0] => Array ([userid] => 79) [1] => Array ([userid] => 115) [2] => Array ([userid] => 124)) 

Was ich zu tun versuchen, für jeden Benutzer in dem Feld # 1, suchen Sie nach einem Wert in dem Feld # 2 unter [userid] zurückgekehrt ist, der den Wert [id] in Array # matches 1. Wenn für jeden Benutzer eine Übereinstimmung gefunden wird, hängen Sie den Schlüssel und den Wert [ismember] => 1 für diesen Benutzer in Array # 1 an. Wenn keine Übereinstimmung vorhanden ist, hängen Sie das Paar [ismember] => 0 an Array # 1 an.

Ich fühle, dass dies ein sehr einfacher Prozess sein sollte, und ich vermisse wahrscheinlich nur etwas, das elementar ist ... Aber ich habe es schon eine Weile gemacht und habe keine großen Fortschritte gemacht. Danke Ihnen allen für Ihre Zeit und Hilfe.

== == EDIT Die erste Anordnung wird durch die folgende MySQL Abfrage generiert:

$query = " 
    SELECT 
     id, 
     firstname, 
     lastname, 
     province, 
     email, 
     primaryphone 
    FROM userstable 
"; 
try 
{ 
    $stmt = $db->prepare($query); 
    $stmt->execute(); 
} 
catch(PDOException $ex) 
{ 
    die("Failed to run query: " . $ex->getMessage()); 
} 
$allusersdetails = $stmt->fetchAll(); 

Das zweite Array von der Abfrage erzeugt:

$query = " 
    SELECT 
     userid 
    FROM membershipstable 
    WHERE templateid = :currenttemplateid 
"; 
try 
{ 
    $stmt = $db->prepare($query); 
    $stmt->bindParam(':currenttemplateid', $currenttemplateid); 
    $stmt->execute(); 
} 
catch(PDOException $ex) 
{ 
    die("Failed to run query: " . $ex->getMessage()); 
} 
$templateusers = $stmt->fetchAll(); 
+0

Sie müssen 2 for Schleifen für Array # 1 und Array # 2 übereinstimmen. –

+0

Es klingt wie Sie dies mit einer MySQL-Abfrage tun könnten. Verwenden Sie nur das 2. Array für diesen Zweck? – Terminus

+0

So kommen die beiden Arrays aus verschiedenen Tabellen.Eine Tabelle ist die Informationstabelle des Benutzers und die andere Tabelle speichert die Zuordnung zwischen der ID des Benutzers und jeder Gruppe, der sie zugeordnet sind. Im Moment verwende ich eine Abfrage, um die Benutzerinformationen aus dem ersten Array abzurufen, und eine zweite Abfrage, um ihre Zuordnung zur aktuellen Gruppe zurückzugeben. –

Antwort

1

Sie können die 2 Abfragen mit einer Abfrage wie dieser ersetzen:

$query = " 
    SELECT 
     u.id, 
     u.firstname, 
     u.lastname, 
     u.province, 
     u.email, 
     u.primaryphone, 
     (CASE WHEN m.userid IS NULL THEN 0 ELSE 1 END) AS ismember 
    FROM userstable AS u 
    LEFT JOIN membershipstable AS m ON 
     m.templateid = :currenttemplateid AND 
     u.id = m.userid 
"; 
try 
{ 
    $stmt = $db->prepare($query); 
    $stmt->bindParam(':currenttemplateid', $currenttemplateid); 
    $stmt->execute(); 
} 
catch(PDOException $ex) 
{ 
    die("Failed to run query: " . $ex->getMessage()); 
} 
$allusersdetails = $stmt->fetchAll(); 

Dies wird weiterhin alle Benutzer ziehen, ob sie Mitglieder sind oder nicht, aber es ismember als Spalte hinzufügen.

(der AS x Teil userstable AS u und membershipstable AS m weist nur den Brief als Alias ​​der Tabelle, für die Dauer der SELECT. Grundsätzlich hilft es Ihnen, vor allem auf die Eingabe zu speichern, sondern auch können Sie JOIN auf Tabellen mit Spalten der gleichen Name)

Willkommen in der wunderbaren Welt der Structured Query. Sprachen: D

EDIT Und für den Fall, dass jemand kommt hier versucht, genau das zu tun, was die Frage Titel ist zu fragen, aber nicht passiert zu sei q Die Datenbank zu bearbeiten, aber hat Arrays in dem exakten Format, das das OP hatte:

<?php 
$array = 
    Array (0 => Array ('id' => '79','firstname' => 'John','lastname' => 'Doe','province' => 'Province','email' => '[email protected]','primaryphone' => '123-456-7890',), 1 => Array ('id' => '113','firstname' => 'Jane','lastname' => 'Doe','province' => 'Province','email' => '[email protected]','primaryphone' => '123-456-7890',)) 
; 
$array2 = 
    Array (0 => Array ('userid' => '79'), 1 => Array ('userid' => '115'), 2 => Array ('userid' => '124')); 

foreach($array as $key => $userInfo) { 
    $isMember = 0; 
    foreach($array2 as $user) { 
     if($userInfo['id'] == $user['userid']) { 
      $isMember = 1; 
      break; 
     } 
    } 
    $array[$key]['ismember'] = $isMember; 
} 
+0

Funktioniert wie ein Zauber - als solcher bin ich überzeugt, dass du entweder ein Magier oder eine Gottheit irgendeiner Art bist ... Dieser einfache Sterbliche dehnt seine aufrichtigste Dankbarkeit und Treue aus, mein Herr. XD –

+1

@JohnDoe lol, du schmeichelst mir;) aber im Ernst, SQL ist weder Magie noch göttliche Kraft! Der Beweis ist, dass sogar ich es lernen kann. lies alles was du darüber kannst! Lass dich niemals denken "es wäre cool, wenn SQL/PHP/Javascript das tun könnte, aber es scheint, dass ich diesen großen, bösen Code verwenden muss". Es gibt wahrscheinlich einen eingebauten Weg, oder jemand anderes hat schon einen schöneren Weg gefunden, es zu tun. Immer nach einer Lösung suchen. Einfach nicht zu lange suchen: D Viel Glück da draußen und fröhliches Programmieren! – Terminus

0

Diese Versuchen,

$firstArray = //your first array 
$secondArray = // your second array 
foreach($firstArray as $fa) { 
    $id = $fa['id']; 
} 
foreach($secondArray as $sa) { 
    $userId = $sa['userid']; 
} 
if($id === $userID) { 
    $firstArray['ismember'] = 1; 
} else { 
    $firstArray['ismember'] = 0; 
} 
+0

Diese Ausgaben: 'Array ([9] => Array ([ID] => 131 [Vorname] => Jane [Nachname] => Doe [Provinz] => Provinz [E-Mail] => [email protected] [primaryphone] => 012-345-6789) [10] => Array ([id] => 132 [Vorname] => John [Nachname] => Doe [Provinz] => Provinz [email] => email @ gmail .com [primaryphone] => 012-345-6789) [isnumber] => 0) '' Es sieht also so aus, als ob die if-Anweisung' [isnumber] 'für das gesamte Array anhängt, das eine Ebene höher ist als das Individuum Benutzer ... –

+0

Also was willst du genau? @JohnDoe –

+0

dieser Code vergleicht nur die letzte ''id'' vom ersten Array mit der letzten'' userid'' vom zweiten Array – Terminus

Verwandte Themen