2016-04-21 2 views
-1

Я звоню в API, чтобы вернуть список вакансий. Выход, который я получаю, выглядит следующим образом:Looping массивы для получения данных

SimpleXMLElement {#357 ▼ 
    +"Jobs": SimpleXMLElement {#368 ▼ 
    +"Job": array:13 [▼ 
     0 => SimpleXMLElement {#371 ▼ 
     +"ID": "J000006" 
     +"Name": "HTML Website" 
     +"Client": SimpleXMLElement {#387 ▶} 
     +"Budget": "5000.00" 
     +"State": "In Progress" 
     +"StartDate": "2016-03-31T00:00:00" 
     +"DueDate": "2016-03-31T00:00:00" 
     } 
     1 => SimpleXMLElement {#372 ▶} 
     2 => SimpleXMLElement {#373 ▶} 
     3 => SimpleXMLElement {#374 ▶} 
     4 => SimpleXMLElement {#375 ▶} 
     5 => SimpleXMLElement {#376 ▶} 
    ] 
    } 
} 

Теперь я пытаюсь получить Цитату, связанную с работой. Так что я сделать вызов API, чтобы получить список цитат, который производит что-то вроде этого

SimpleXMLElement {#358 ▼ 
    +"Quotes": SimpleXMLElement {#366 ▼ 
    +"Quote": array:12 [▼ 
     0 => SimpleXMLElement {#369 ▼ 
     +"ID": "Q0019" 
     +"Type": "Quote" 
     +"State": "Accepted" 
     +"Name": "HTML Website" 
     +"Budget": "5000.00" 
     +"LeadID": "1232718" 
     +"Date": "2016-04-21T00:00:00" 
     +"ValidDate": "2016-05-19T00:00:00" 
     +"Amount": "1950.00" 
     +"AmountTax": "390.00" 
     +"AmountIncludingTax": "2340.00" 
     +"Client": SimpleXMLElement {#384 ▶} 
     } 
     1 => SimpleXMLElement {#370 ▶} 
     2 => SimpleXMLElement {#371 ▶} 
     3 => SimpleXMLElement {#372 ▶} 
     4 => SimpleXMLElement {#373 ▶} 
     5 => SimpleXMLElement {#374 ▶} 
    ] 
    } 
} 

Так что я теперь есть два XMLElements, сейчас я пытаюсь создать массив, который имеет следующие

Job -> ID 
Job -> Name 
Job -> Client 
Quote -> Amount 
Quote -> AmountTax 
Quote -> AmountIncludingTax 

Поэтому я создаю пустой массив

$finalArray = array(); 
$iterator = 0; 

с выше XML, вещь, которая может соответствовать цитату на Иова атрибут Name. Так я начинаю цикл рабочих мест и кавычки, чтобы заполнить мой массив с данными мне нужно

foreach ($currentJobsXML->Jobs->Job as $job) { 
    $seconditerator = 0; 
    foreach($jobsQuoteXML->Quotes->Quote as $quote) { 
     if((string)$quote->State == 'Accepted') { 
      if ((string)$job->Name == (string)$quote->Name) { 
       $finalArray[$iterator]['TEST'][$seconditerator] = array(
        'Job ID' => (string)$job->ID, 
        'Project Name' => (string)$job->Name, 
        'Client' => (string)$job->Client->Name, 
        'Quote Exc VAT' => (string)$quote->Amount, 
        'VAT Amount' => (string)$quote->AmountTax, 
        'Total Amount' => (string)$quote->AmountIncludingTax 
       ); 
       $seconditerator++; 
      } 
     } 
    } 
} 

С выше коде, я только когда-нибудь появится, чтобы получить один выход в моем массиве

array:1 [▼ 
    0 => array:1 [▼ 
    "TEST" => array:1 [▼ 
     0 => array:6 [▼ 
     "Job ID" => "J000006" 
     "Project Name" => "HTML Website" 
     "Client" => "Prospect 1" 
     "Quote Exc VAT" => "1950.00" 
     "VAT Amount" => "390.00" 
     "Total Amount" => "2340.00" 
     ] 
    ] 
    ] 
] 

Там довольно много котировок, которые были приняты с тем же именем, что и имя вакансии, поэтому я должен получить все эти данные .

С приведенным выше кодом, почему мои данные переписываются?

Благодаря

ответ

2

Я думаю, что вы забываете, чтобы увеличить ваш $iterator

foreach ($currentJobsXML->Jobs->Job as $job) { 
    $seconditerator = 0; 
    foreach($jobsQuoteXML->Quotes->Quote as $quote) { 
     if((string)$quote->State == 'Accepted') { 
      if ((string)$job->Name == (string)$quote->Name) { 
       $finalArray[$iterator]['TEST'][$seconditerator] = array(
        'Job ID' => (string)$job->ID, 
        'Project Name' => (string)$job->Name, 
        'Client' => (string)$job->Client->Name, 
        'Quote Exc VAT' => (string)$quote->Amount, 
        'VAT Amount' => (string)$quote->AmountTax, 
        'Total Amount' => (string)$quote->AmountIncludingTax 
       ); 
       $seconditerator++; 
      } 
     } 
    } 
    $iterator++; 
} 

Я не на самом деле думаю, что вам действительно нужно, что $seconditerator либо, если вы просто использовать [] он будет автоматически увеличивать этот массив как это

foreach ($currentJobsXML->Jobs->Job as $job) { 
    //$seconditerator = 0; 
    foreach($jobsQuoteXML->Quotes->Quote as $quote) { 
     if((string)$quote->State == 'Accepted') { 
      if ((string)$job->Name == (string)$quote->Name) { 
       //$finalArray[$iterator]['TEST'][$seconditerator] = array(
       $finalArray[$iterator]['TEST'][] = array(
        'Job ID' => (string)$job->ID, 
        'Project Name' => (string)$job->Name, 
        'Client' => (string)$job->Client->Name, 
        'Quote Exc VAT' => (string)$quote->Amount, 
        'VAT Amount' => (string)$quote->AmountTax, 
        'Total Amount' => (string)$quote->AmountIncludingTax 
       ); 
       //$seconditerator++; 
      } 
     } 
    } 
    $iterator++; 
} 
Смежные вопросы