2017-09-29 2 views
1

ich dieses mehrdimensionales Array haben:ein mehrdimensionales Array von einem multidimensionalen Array in PHP

$sales = Array (
[0] => Array (
    [salesID] => 1 
    [price] => 50 
    [user_first] => Jane 
    [user_last] => Doe 
) 
[1] => Array (
    [salesID] => 2 
    [price] => 250 
    [user_first] => John 
    [user_last] => Smith 
) 
[2] => Array (
    [salesID] => 1 
    [price] => 50 
    [user_first] => Jane 
    [user_last] => Doe 
) 
); 

Dass ich in drehen müssen:

$sales = Array(
[2] => Array (
    [Name] => John Smith 
    [Sales] => 250 
    [Signups] => 1 
) 
[1] => Array (
    [Name] => Jane Doe 
    [Sales] => 100 
    [Signups] => 2 
) 
); 

ich zur Zeit die folgenden haben, dass erstellt das neue Array, aktualisiert jedoch nicht die Werte im neuen Array.

$leader_board = array(); 
foreach ($sales as $index => $row) { 
    if (!in_array($row['salesID'], $leader_board)) { 
     $new_row = array('Name' => $row['user_first'] . ' ' . $row['user_last'], 'SignUps' => 1, 'Sales' => $row['price']); 
     $leader_board[$row['salesID']] = $new_row; 
    } else { 
     $leader_board[$row['salesID']]['SignUps'] += 1; 
     $leader_board[$row['salesID']]['Sales'] += $row['price']; 
    } 
} 
+3

Wo ist der 'salesID' Schlüssel in Ihrem ersten Array? Soll es nur "id" sein? – Rasclatt

+0

Ja tut mir leid, ich habe es aktualisiert. – glitchbox

Antwort

1

Sie können es wie unten tun (ich Antwort auf der Grundlage Ihrer Eingabe gegeben haben und erwartete Ausgabe nur, nicht basierend auf dem Code, was Sie versucht): -

$final_array = array(); 

foreach($sales as $sale){ 
    $final_array[$sale['id']]['Name'] = $sale['user_first']." ".$sale['user_last']; 
    $final_array[$sale['id']]['Sales'] = (isset($final_array[$sale['id']]['Sales'])) ? $final_array[$sale['id']]['Sales']+ $sale['price'] : $sale['price']; 
    $final_array[$sale['id']]['Signups'] = (isset($final_array[$sale['id']]['Signups'])) ? $final_array[$sale['id']]['Signups']+ 1 : 1; 
} 
krsort($final_array);// Sort array by key in reverse order 
print_r($final_array); 

Ausgang: - https://eval.in/870767

Referenz: - krsort()

+0

Danke! Das hat total funktioniert. – glitchbox

+0

@glitchbox froh, Ihnen zu helfen :) :) –

Verwandte Themen