2016-07-22 9 views
0

Ich habe ein Array aktuellen Ticket-Informationen enthält, wie folgt:PHP: durch zwei Arrays iterieren, Spiel finden, kombinieren

[0] => Array 
    (
     [id] => 1155643 
     [text] => Physical Move and Assistance 
     [location] => 25158 16th Ave NE, Lynnwood, WA, 98110, USA 
     [company] => Blank Architecture, LLC. 
     [site] => Main 
     [contact] => First Last 
     [start_date] => 2016-07-30 18:00:00 
     [end_date] => 2016-07-30 22:00:00 
     [technician] => First Last 
     [hours] => 4 
     [status] => Firm 
     [ownerFlag] => 1 
     [lat] => 47.54601 //Incorrect latitude 
     [lng] => -122.22651 //Incorrect longitude 
    ) 

[1] => Array //There are 70+ more... 

Ich habe auch ein anderes Array, aus dem die Firma Standortkoordinaten aus gezogen werden:

Nach dem Ziehen der Ticketdaten (cURL) von unserem System, verwende ich zwei Schleifen, um beide Datensätze zu durchlaufen, aber nicht die richtigen Koordinaten zu erhalten, um in den größeren Datenbereich zu füllen. Genauer gesagt ist das einzige Koordinatenpaar, das im Unternehmensinformationsfeld gezogen und gefüllt wird, das letzte Paar in der Iteration, [132].

ist hier ein Code-Schnipsel:

if ($ticket_number = $onsites) { 
$current_onsites = array(); 
$i = 0; 

$coordinates = json_decode(file_get_contents('geo.json'), true); 
$crd = array(); 

for ($i = 0; $i <= count($ticket_number); $i++) { 
    @$current_onsites[$i]['id'] = $ticket_number[$i]; 
    @$current_onsites[$i]['text'] = $summary[$i]; 
    @$current_onsites[$i]['location'] = $location[$i]; 
    @$current_onsites[$i]['company'] = $company[$i]; 
    @$current_onsites[$i]['site'] = $site[$i]; 
    @$current_onsites[$i]['location'] = $full_address[$i]; 
    @$current_onsites[$i]['contact'] = $contact[$i]; 
    @$current_onsites[$i]['start_date'] = date('Y-m-d H:i:s', strtotime($startDate[$i])); 
    @$current_onsites[$i]['end_date'] = date('Y-m-d H:i:s', strtotime($endDate[$i])); 
    @$current_onsites[$i]['technician'] = $technician[$i]; 
    @$current_onsites[$i]['hours'] = $hours[$i]; 
    @$current_onsites[$i]['status'] = $status[$i]; 
    @$current_onsites[$i]['ownerFlag'] = $ownerFlag[$i]; 

    foreach ($coordinates as $latlng){ 
     if ($latlng['input_id'] = @$current_onsites[$i]['company']) { 
      @$current_onsites[$i]['lat'] = $latlng['metadata']['latitude']; 
      @$current_onsites[$i]['lng'] = $latlng['metadata']['longitude']; 
     } else {} 
    } 
} 

print "<pre>"; 
print_r ($current_onsites); 
print "</pre>"; 

//$fp = fopen('results.json', 'w'); 
//fwrite($fp, json_encode($current_onsites)); 
//fclose($fp); 

ich den Code kennen ziemlich schmutzig ist, suche ich es jetzt nur um zu arbeiten. Irgendwelche Ideen werden sehr geschätzt. Vielen Dank.

Antwort

1
if ($latlng['input_id'] = @$current_onsites[$i]['company']) { 

Sie haben eine einziges = dort ankamen - das ist Zuordnung, kein Vergleich.

Aber Sie sollten es auf diese Weise sowieso nicht tun. Zwei Schleifen machen Ihren O (n) -Algorithmus zu O (n^2). Indexieren Sie das zweite Array erneut nach Firmenname, damit Sie schnelle Suchvorgänge durchführen können.