Zwei Arrays verbinden?!


OrderMax

Grünschnabel
#1
Irgendwie stecke ich gerade fest. Ich habe 2 XML Dateien die ich in 2 Arrays einlese.

In der einen XML stehen die Kundendaten und die zweite listet die Kundenummer der User die gerade Online sind.
Ich würde nun gerne eine Liste ausgeben mit den Namen/Profilbild, der User die Online sind. Kann man zwei Array irgendwie verbinden?
Aktuell hab ich das versucht mit zwei Schleifen zu lösen, was aber nicht funktionieren will.

Gibt es dafür eine Funktion oder wie würdet ihr das lösen?

Gruß Ordermax
 

OrderMax

Grünschnabel
#3
XML 1
XML:
<aliases languageCode="de" language="Deutsch">
    <alias id="a15">
        <name>Mustermann</name>
        <age>28</age>
        <phone>0178-123456789</phone>
        <description>Hier eine kurze Beschreibung!</description>
        <sex>Mann</sex>
        <languages>
            <language>de</language>
            <language>en</language>
        </languages>
        <hobbys>
            <hobby>Autofahren</hobby>
            <hobby>Computer/Internet</hobby>
        </hobbys>
        <previewImages>
            <image>/profile/23423.jpg</image>
        </previewImages>
    </alias>
XML 2
XML:
<statusList>
    <status aliasId="a15">
        <chat>
            <member state="free" />
            <free state="off" />
        </chat>
    </status>
<status aliasId="a215">
    <chat>
        <member state="free" />
        <free state="off" />
    </chat>
</status>
So in etwa sieht das aus. ID und aliasID sind hier die Kundennummern
 

OrderMax

Grünschnabel
#5
PHP:
for($i=0; $i < $counter; $i++)
{
    foreach($xml->status as $list) {
      if($list['aliasId'] == $db->alias[$i]['id'])
      {
        echo "-".$list['aliasId']."<br>";
      }
  }
}
Kann mir jemand sagen ob an der IF Abfrage etwas falsch ist? Ich sitze den ganzen Tag an diesem blöden Code und bekomme es nicht hin. Ich kann $list['aliasId'] und $db->alias[$i]['id'] per echo ausgeben, aber die IF Abfrage will einfach nicht funktionieren.

LG Ordermax
 

Yaslaw

n/a
Moderator
#6
Die if-Abfrage stommt schon. Die Werte scheinen unterschiedlich zu sein. Gibt mal beide mit var_Dump() . nicht mit echo() aus und vergleiche sie.
 

OrderMax

Grünschnabel
#7
Hallo Yaslaw,

du hast Recht.
Wenn ich var_dump($xml) bzw. var_dump($db) ausgebe, sehe ich bei beiden Feeds keine ID.

var_dump($xml->status);
Zeigt mir zwar die ID an, aber nur den ersten Datensatz.
Liegt es vielleicht daran dass die ID innerhalb einer Klammer steht?

Was ich nicht verstehe, wenn ich sie per Schleife auslese, bekomme ich alle IDs aus den Feeds angezeigt.

XML:
<aliases languageCode="de" language="Deutsch">
    <alias id="a150">
        <name>Mustermann</name>
[...]
 

OrderMax

Grünschnabel
#9
Ich kann die var_dump hier nicht posten.
Die Datei ist zu groß, ca. 5MB und ich müsste zuviele Daten aus Datenschutzgründen ändern.

So sieht mein Script aktuell aus:
PHP:
$datei1 = "https://externe-domain.com/online.xml";
$datei2 = "xml-index.xml";

$xml = simplexml_load_file($datei1);
$db = simplexml_load_file($datei2);

$counter =  count($db);

for($i=0; $i < $counter; $i++)
{

    foreach($xml->status as $list) {
      if($list['aliasId'] == $db->alias[$i]['id'])
      {
        echo "-".$list['aliasId']."<br>";
        echo "OK";
      }
  }
}

//var_dump($xml);
//var_dump($db);
 

Yaslaw

n/a
Moderator
#10
Und jetzt? Es bleibt immer noch ein XML und kein Array.
Die ID ist ein Attribut des Tags alias. ALso gibt es kein Eintrag aliasId.

Mach dich mal schlau, wie man XML-Attribute auslesen kann.