2016-04-20 8 views
0

Ich mag so wie aus einem SimpleXML Objekt ein Array aufzubauen, soHinzufügen zusätzlicher Daten zu Array

$currentXML = new \SimpleXMLElement($getCurrentXML); 
$leadArray = array(); 

foreach($currentXML->Job->Employee as $object) { 
    $dataArray[] = array(
     'ID' => (string)$object->ID, 
     'Date Identified' => $dateIdentified, 
     'Name' => (string)$object->Name, 
     'Owner' => (string)$object->Owner->Name, 
     'Value' => (string)$object->EstimatedValue 
    ); 
} 

Wenn ich geben die Daten für die oben, bekomme ich so etwas wie die perfekt

array:8 [▼ 
    0 => array:7 [▼ 
    "ID" => "1230279" 
    "Date Identified" => "19/04/2016" 
    "Name" => "Some Name" 
    "Owner" => "Some Owner" 
    "Value" => "Some Value" 
    ] 
    1 => array:7 [▶] 
    2 => array:7 [▶] 
    3 => array:7 [▶] 
    4 => array:7 [▶] 
    5 => array:7 [▶] 
    6 => array:7 [▶] 
    7 => array:7 [▶] 
] 

Jetzt innerhalb der obigen foreach-Schleife, muss ich $ object-> ID verwenden, um eine andere API abzufragen. Ich habe SO

foreach($currentXML->Job->Employee as $object) { 
    $dataArray[] = array(
     'ID' => (string)$object->ID, 
     'Date Identified' => $dateIdentified, 
     'Name' => (string)$object->Name, 
     'Owner' => (string)$object->Owner->Name, 
     'Value' => (string)$object->EstimatedValue 
    ); 

    $customField = Helper::getCustomFields((string)$object->ID); 
    $currentFieldsXML = new \SimpleXMLElement($customField); 
} 

Nun, wenn ich Ausgang currentFieldsXML, manchmal bin ich zurückgekehrt und leer SimpleXMLElement Objekt, manchmal ist es Daten enthält. Was ich versuche zu tun ist, die Daten in das Array neben seinen anderen Daten zu schieben. Also ich habe diese

foreach($currentXML->Job->Employee as $object) { 
    $dataArray[] = array(
     'ID' => (string)$object->ID, 
     'Date Identified' => $dateIdentified, 
     'Name' => (string)$object->Name, 
     'Owner' => (string)$object->Owner->Name, 
     'Value' => (string)$object->EstimatedValue 
    ); 

    $customField = Helper::getCustomFields((string)$object->ID); 
    $currentFieldsXML = new \SimpleXMLElement($customField); 

    if(!empty($currentFieldsXML->CustomFields)) { 
     foreach($currentFieldsXML->CustomFields as $custom) { 
      array_push($dataArray, (string)$custom->CustomField->ID); 
      array_push($dataArray, (string)$custom->CustomField->Name); 
      array_push($dataArray, (string)$custom->CustomField->Text); 
     } 
    } 
} 

Das Problem dabei ist, dass die Ausgabe in etwa so

ist
array:23 [▼ 
    0 => array:7 [▶] 
    1 => array:7 [▶] 
    2 => "122156" 
    3 => "Some Data" 
    4 => "Some more Data" 
    5 => array:7 [▶] 
    6 => "122156" 
    7 => "Date" 
    8 => "20 April" 
] 

So Element 0 hat keine benutzerdefinierten Felder mit ihr verbunden sind. Element 1 haben Daten haben, aber es ist die Anzeige als Element 2, 3 und 4. Im Wesentlichen die oben soll diese etwa so aussehen

array:8 [▼ 
    0 => array:7 [▶] 
    1 => array:7 [▼ 
    "ID" => "1230279" 
    "Date Identified" => "19/04/2016" 
    "Name" => "Some Name" 
    "Owner" => "Some Owner" 
    "Value" => "Some Value" 
    array:3 [ 
     1 => "122156" 
     2 => "Some Data" 
     3 => "Some more Data" 
    ] 
    ] 
    ... 
] 

Wie kann ich die Daten füge ich in seine sachgemäßen Array zurückgegeben bin wie oben gezeigt?

Dank

UPDATE Sorry, mein Fehler

Antwort

1
$iterator=0; 
foreach($currentXML->Job->Employee as $object) { 
    $dataArray[$iterator] = array(
     'ID' => (string)$object->ID, 
     'Date Identified' => $dateIdentified, 
     'Name' => (string)$object->Name, 
     'Owner' => (string)$object->Owner->Name, 
     'Value' => (string)$object->EstimatedValue 
    ); 

    $customField = Helper::getCustomFields((string)$object->ID); 
    $currentFieldsXML = new \SimpleXMLElement($customField); 

    if(!empty($currentFieldsXML->CustomFields)) { 
     $seconditerator=0; 
     foreach($currentFieldsXML->CustomFields as $custom) { 
      $dataArray[$iterator][$custom->CustomField->ID][$seconditerator]=(string)$custom->CustomField->ID; 
      $dataArray[$iterator][$custom->CustomField->ID][$seconditerator]=(string)$custom->CustomField->Name; 
      $dataArray[$iterator][$custom->CustomField->ID][$seconditerator]=(string)$custom->CustomField->Text; 
      $seconditerator++; 
     } 
    } 
    $iterator++; 
} 
+0

Es macht nichts, machte ich einen Fehler auf welchem ​​Element ich war die Überprüfung. Danke, deine Antwort funktioniert perfekt. –

+0

Ich habe meine Antwort basierend auf Ihren Änderungen an der Frage bearbeitet, die nun gemäß Ihren Anforderungen funktioniert – Shahrukh