2016-09-06 62 views
-1

我有這個疑問(這是工作):PHP - 重新人氣指數鍵和值數組中

$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"; 

查詢給了我這樣的結果:

[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" 
    }.... 

我需要怎麼做是製作dateadded一個關鍵和newFile(計數)一個值。像這樣:

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

這是可能的查詢嗎?或者有一些更有效的方法,然後使用foreach循環?

+1

它可以很容易使用[array_column()](http://www.php.net/manual/en/function.array-column.php)來完成:'$結果= array_column($結果, 'newFile','dateAdded');' –

回答

1

不需要的foreach只是array_column

array_column - 返回輸入數組中單個列的值。

array_column()返回由column_key標識的輸入的單個列中的值。可選地,可以提供index_key以通過來自輸入數組的index_key列的值來對返回數組中的值進行索引。

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

你需要一個foreach循環。

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

不,我不認爲這可以用Mysql查詢完成。您可以使用foreach此:

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

嘗試下面的代碼,這使用foreach循環,因爲我不認爲一個查詢就足夠了,但我可能是錯的。

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

它適用於我。您可以刪除$ key並使用值。

這是做一個空數組,給它一個自定義鍵從你的舊數組,它使用的名稱,因爲它是一個關聯數組。然後從那裏你可以使用賦值=運算符,使用關聯數組再次

你可以問我更多的幫助,如果你需要澄清:d

古德勒克meyt

1

您可以使用array_map與封閉:

<?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);