2016-09-06 3 views
-1

Ich habe diese Abfrage (es funktioniert):PHP - re-arange Schlüssel und Werte im Array

$filesQuery = "SELECT COUNT(cs_file.iduser) AS newFile, DATE(cs_file.add_date) AS 
      dateAdded 
      FROM cs_file 
      INNER JOIN cs_team_has_user ON cs_team_has_user.iduser = cs_file.iduser 
      INNER JOIN cs_portal_has_team ON cs_portal_has_team.idteam = cs_team_has_user.idteam 
      WHERE cs_file.add_date >= DATE(NOW()) - INTERVAL {$range} DAY 
      AND cs_file.isImage = 0 
      GROUP BY DATE(cs_file.add_date) 
      WITH rollup"; 

Die Abfrage gibt mir dieses Ergebnis:

[0]=> 
    array(2) { 
    ["newFile"]=> 
    string(2) "12" 
    ["dateAdded"]=> 
    string(10) "2016-03-23" 
    } 
    [1]=> 
    array(2) { 
    ["newFile"]=> 
    string(1) "2" 
    ["dateAdded"]=> 
    string(10) "2016-04-01" 
    } 
    [2]=> 
    array(2) { 
    ["newFile"]=> 
    string(2) "10" 
    ["dateAdded"]=> 
    string(10) "2016-04-22" 
    }.... 

Was ich machen müssen ist make dateAdded ein Schlüssel und newFile (die Zählung) ein Wert. Wie folgt:

[ 
'2016-03-23' => '12', 
'2016-04-01' => '2', 
'2016-04-22' => '10' 
] 

Ist dies mit der Abfrage möglich? Oder gibt es einen effizienteren Weg, dann mit foreach-Schleife?

+1

Es kann leicht mit Hilfe von [array_column()] (http://www.php.net/manual/en/function.array-column.php) erfolgen: '$ result = array_column ($ result, 'newFile', 'dateAdded'); ' –

Antwort

1

nicht foreach tun es nur mit array_column

brauchen

array_column - Gibt die Werte einer einzelnen Spalte im Eingabearray zurück.

array_column() gibt die Werte einer einzelnen Spalte der Eingabe zurück, die durch den Spaltenschlüssel angegeben wird. Optional kann ein index_key angegeben werden, um die Werte im zurückgegebenen Array mit den Werten aus der index_key-Spalte des Eingabearrays zu indizieren.

$final_array = array_column($result, 'newFile', 'dateAdded'); 
0

Sie benötigen eine foreach-Schleife.

$res = []; 
foreach($array as $value){ 
    $res[$value['dateAdded']] = $value['newFile']; 
} 
1

Nein, ich denke nicht, dass es mit Mysql Abfrage durchgeführt werden kann. Sie können foreach für diesen Einsatz:

$output = array(); 
foreach($output as $val){ 
    $output[ $val['dateAdded'] ] = $val['newFile']; 
} 
print_r($output); 
0

den folgenden Code Versuchen Sie, diese nutzt foreach-Schleife, da ich glaube nicht, dass eine Abfrage genug sein wird, aber ich kann falsch sein.

$myarray = array(); 
foreach($yourarray as $key => $value) 
{ 
    $myarray[$value['dateAdded']] = $value['newfile']; 
} 
print_r($myarray); //tocheack 

Es funktioniert mit mir. Sie könnten den Schlüssel $ entfernen und einfach den Wert verwenden.

Dies ist ein leeres Array, geben Sie einen benutzerdefinierten Schlüssel aus Ihrem alten Array, es verwendet den Namen, da es ein assoziatives Array ist. dann von dort aus können Sie wieder einen Wert mit Operator = und verwenden Sie die assoziative Array zuweisen

Sie mich für weitere Hilfe bitten, wenn Sie Klärung bedürfen: D

Goodluck

1

Sie meyt array_map verwenden können Schließung:

<?php 

$r = array(
    array('idx'=>22, 'val'=>55), 
    array('idx'=>33, 'val'=>77), 
    array('idx'=>44, 'val'=>44), 
); 

$result = array(); 

array_map(function($val) use (&$result) { 
    $result[$val['idx']] = $val['val']; 
}, $r); 


print_r($result); 
Verwandte Themen