2014-03-04 3 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

불행히도, 그것은 나를 위해 건재하지 않습니다 ... 두 교차 매개 변수로 정렬 –

+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

Таanks 많이. 그것은 나를 위해 정말 유용한 정보입니다. 그러나 그것은 내가 필요한 것만은 아닙니다. 이미 배열을 정렬했습니다. 특정 방식으로 GROUP 결과가 필요합니다. 그리고 단순한 opertaor에 의해 "for"는 그렇게 할 수 없습니다. –

+0

그룹화 란 무엇을 의미합니까? 다음과 같은 표를 원하십니까? > A1 | B1 | C1 < > | B2 | C2 < > | | C3 < > | B3 | C4 < > A2 | B4 | C5 < ? – cyper

+0

나는 그것을 위쪽으로 그렸다. 저기 봐. –

관련 문제