2017-11-16 5 views
1

Ich habe ein Problem mit zwei Arrays, die wir kombinieren müssen, wo das erste Array eine Liste der Kampagnennamen (page_data) enthält wieKombinieren und Karte zwei Arrays

[0 => "Campaign 1", 1 => "Campaign 2", 2 => "Campaign 3"] 

und ein anderes Array, Anzahl der Leitungen enthält für die Kampagnen. Aber dieses Array doppelt so viele Tasten wie die Kampagne Array wie folgt enthalten:

[0 => 222, 1 => 342, 2 => 71, 3 => 33, 4 => 43, 5 => 665] 

Es enthält doppelt so viele Schlüssel, denn es führt von zwei verschiedenen Formen annehmen, so die Werte für key 0 und key 3 wird für Kampagne 1 und key 2 und key 4 werden für Kampagne 2 sein. Es wird immer so sein. Wenn es 5 Kampagnen sind, führt Array 10 Tasten und key 0 und key 5 für Kampagne sein wird, key 1 eine key 6 für Kampagne 2 usw.

Und dann habe ich dieses Stück Code zu kombinieren (push):

foreach(json_decode($result) as $key) {         

    foreach($pages["page_data"] as $p => $pvalue) { 

     array_push($leadArray, array("pageName" => $pvalue["form_name"], "pageLeads" => $key[$p])); 

    }   
} 

das macht und Array, das wie etwas aussieht:

["campaign 1" => 222, "campaign 2" => 342, "campaign 3" => 71] 

Aber das wird nur nehmen Tasten 0,1,2 und so Taste 3,4,5 nicht im Array sein.

Was ich will, ist der Schlüssel 0 und Taste 3, die Taste 1 und Taste 4 usw. in der Anordnung führt kombiniert werden, so dass die die neue Array führt wird

seine
[0 => 255, 1 => 386, 2 => 736] 

, die ich mit dann kombinieren die Kampagnen-Array als die Anzahl der Schlüssel aus den beiden Feldern wird übereinstimmen nun die mir geben ein Array, das Werte wie

["campaign 1" => 255, "campaign 2" => 386, "campaign 3" => 736] 
+1

Ich würde vorschlagen, 'for()' anstelle von 'foreach()' mit solchen komplexen Arrays zu verwenden, um die Dinge einfach und leicht zu handhaben. –

+0

Was erwarten Sie? Deine Frage ist an irgendeinem Ort nicht klar. –

+0

Zusätzlich zu @RedBottles Kommentar scheint es, als ob Sie Modulo - Operator brauchen ... – urban

Antwort

1

Verwenden array_chunk Funktion für Split Ihre zweite Array und es wird einfach zu fassen sucht.

Wenn Sie diese Funktion verwenden, wird Ihr Array in zwei Arrays aufgeteilt. Im ersten Array haben Sie die Werte 0, 1, 2, und in der Sekunde haben Sie 3, 4, 5 Werte. Durchlaufen Sie nun Ihr erstes Array und verwenden Sie Schlüssel, um Zugriff auf Wertepaare zu erhalten: 0-3, 1-4, 2-5.

Schauen Sie sich diesen Code:

<?php 

$array1 = [0 => "Campaign 1", 1 => "Campaign 2", 2 => "Campaign 3"]; 
$array2 = [0 => 222, 1 => 342, 2 => 71, 3 => 33, 4 => 43, 5 => 665]; 

$chunkedArray2 = array_chunk($array2, count($array1), false); 

$result = []; 
foreach($array1 as $key => $value) { 
    $result[$value] = $chunkedArray2[0][$key] + $chunkedArray2[1][$key]; 
} 

var_dump($result); 

und das Ergebnis ist:

Array 
(
    [Campaign 1] => 255 
    [Campaign 2] => 385 
    [Campaign 3] => 736 
) 
+0

Das funktioniert super! Vielen Dank! –

0

dieses Probieren Sie eine

$result = json_decode($result); 
$count = count($result); 
$final = array(); 
foreach($result as $key => $value){ 
    $final[$value] = $pages["page_data"][$key] + $pages["page_data"][$key+$count]; 
} 
var_dump($final); 
0

@aslawin Ansatz kann eine litle leicht mit einigen Funktionen realisiert werden

$array1 = [0 => "Campaign 1", 1 => "Campaign 2", 2 => "Campaign 3"]; 
$array2 = [0 => 222, 1 => 342, 2 => 71, 3 => 33, 4 => 43, 5 => 665]; 

$res = array_combine($array1, 
      array_map(function($i1, $i2) { return $i1+$i2; }, 
       ...array_chunk($array2, count($array1))))