2014-03-04 50 views
-3

我有一個數組。我嘗試將它分組到一個這樣的表格。排序數組表2個參數

------------------------------------------------------------- 
      | 2014-01-21 | 2014-01-22 | 2014-01-23 | 2014-01-27 
-------------------------------------------------------------  
title1 |  50  |  5  | 20+7 |  0 | 
------------------------------------------------------------- 
title2 |  40  |  20  |  0  |  0 | 
------------------------------------------------------------ 
title3 |  0  |  0  |  40  |  40 | 
------------------------------------------------------------- 
title4 |  0  |  0  |  4  |  0 | 
------------------------------------------------------------- 

即我想按「標題」和「日期」分組並按第三個參數加起來。

$items_arr =(
[0] => Array( [1] => title1 [2] => 2014-01-21 [3] => 50) 
[1] => Array( [1] => title1 [2] => 2014-01-22 [3] => 5) 
[2] => Array( [1] => title1 [2] => 2014-01-23 [3] => 7) 
[3] => Array( [1] => title1 [2] => 2014-01-23 [3] => 20) 
[4] => Array( [1] => title2 [2] => 2014-01-21 [3] => 40) 
[5] => Array( [1] => title2 [2] => 2014-01-22 [3] => 20) 
[6] => Array( [1] => title3 [2] => 2014-01-23 [3] => 40) 
[7] => Array( [1] => title3 [2] => 2014-01-27 [3] => 40) 
[8] => Array( [1] => title4 [2] => 2014-01-23 [3] => 4) 
) 


for($i=0; $i<($numworks); $i++) 
{ 
    echo "<tr><td>". $works_arr[$i]."</td>"; 
    for($j=0; $j<$numitems; $j++){ 
     if (($works_arr[$i] == $items_arr[$j][1])){ 
     echo "<td>".$items_arr[$j][3]."</td>"; 
     }else{ echo "<td>0</td>"; } 
    }; 
    echo "</tr>"; 
} 

其中$ numitems是$ items_arr處的數字元素。

$numworks at $works_arr Array([0] => title1 [1] => title2 [2] => title3 [3] => title4) 
+0

還有......什麼問題,你有特別? –

+0

不幸的是,它不是trevail對我來說...排序由2個交叉的參數 –

+0

你能告訴你的代碼迄今嘗試過,並指出它不是表現你所期望的方式? –

回答

1
$items_arr = Array(
    Array( 1 => "title1", 2 => "2014-01-21", 3 => 50), 
    Array( 1 => "title1", 2 => "2014-01-22", 3 => 5), 
    Array( 1 => "title1", 2 => "2014-01-23", 3 => 7), 
    Array( 1 => "title1", 2 => "2014-01-23", 3 => 20), 
    Array( 1 => "title2", 2 => "2014-01-21", 3 => 40), 
    Array( 1 => "title2", 2 => "2014-01-22", 3 => 20), 
    Array( 1 => "title3", 2 => "2014-01-23", 3 => 40), 
    Array( 1 => "title3", 2 => "2014-01-27", 3 => 40), 
    Array( 1 => "title4", 2 => "2014-01-23", 3 => 4), 
); 
$rows = Array(); 
$cols = Array(); 
$assoc_array = Array(); 

// create a assoc array 
foreach($items_arr as $item) { 
    if(isset($assoc_array[$item[1]]) AND isset($assoc_array[$item[1]][$item[2]])) 
    $assoc_array[$item[1]][$item[2]] += $item[3]; 
    else 
    $assoc_array[$item[1]][$item[2]] = $item[3]; 
    $rows[] = $item[1]; 
    $cols[] = $item[2]; 
} 

// sort the cols and rows 
$cols = array_unique($cols); 
$rows = array_unique($rows); 

//print the table 
print "<tr><td></td>"; 
foreach($cols as $col) { 
    print "<td>{$col}</td>"; 
} 
print "</tr>"; 
foreach($rows as $row) { 
    print "<tr><td>{$row}</td>"; 
    foreach($cols as $col) { 
    print "<td>"; 
    if(isset($assoc_array[$row]) AND isset($assoc_array[$row][$col])) 
     print $assoc_array[$row][$col]; 
    else 
     print "0"; 
    print "</td>"; 
    } 
    print "</tr>"; 
} 

老答案:

功能usort有助於創造一個sortalgorithm一個特殊的問題。

$items_arr = Array(
    Array( 1 => "title1", 2 => "2014-01-21", 3 => 50), 
    Array( 1 => "title1", 2 => "2014-01-22", 3 => 5), 
    Array( 1 => "title1", 2 => "2014-01-23", 3 => 7), 
    Array( 1 => "title1", 2 => "2014-01-23", 3 => 20), 
    Array( 1 => "title2", 2 => "2014-01-21", 3 => 40), 
    Array( 1 => "title2", 2 => "2014-01-22", 3 => 20), 
    Array( 1 => "title3", 2 => "2014-01-23", 3 => 40), 
    Array( 1 => "title3", 2 => "2014-01-27", 3 => 40), 
    Array( 1 => "title4", 2 => "2014-01-23", 3 => 4), 
); 

function specialsort(a,b) { 
    if ($a[1] == $b[1]) { 
    if ($a[3] == $b[3]) { 
     return 0; 
    } 
    return ($a[3] < $b[3]) ? -1 : 1; 
    } 
    return ($a[1] < $b[1]) ? -1 : 1; 
} 

usort($items_arr, "specialsort"); 
+0

Тhanks很多。這對我來說是非常有用的信息。但這不完全是我需要的。我已經有了排序數組。我需要以特定的方式對GROUP結果進行分析。而通過簡單的操作「for」不能做到這一點。 –

+0

你的分組意味着什麼?你想這樣的一個表: > A1 | B1 | C1 < > | B2 | C2 < > | | C3 < > | B3 | C4 < > A2 | B4 | C5 < ? – cyper

+0

我已經把它畫上了。請看看它。 –