2014-12-11 7 views
0

내가 뭘하려고하는지 모르겠습니다. 잘못된 이름을 사용했다면 사과드립니다.PHP 다차원 배열 - 작동시키기

는 여기에 내가 달성하기 위해 노력하고 무엇의 기본적인 예입니다

여기
$arrayData = (4,5,6,7,8,9,10); 

$public function setArray($colNum){ 
    $i = 0; 
    while($i < count($arrayData){ 

내가 무엇을 해야할지하지 않는 곳입니다. $ colNum이 새 배열의 열 수를 설정하도록합니다. 그래서

if $colNum = 4, then $arrayNew[$i][$i][$i][$arrayData[$i] 

이 설정됩니다. 현재 각기 다른 수의 열을 처리하고 작동하는 여러 함수를 만들었지 만 2 열에서 30 열의 범위를 가질 수 있으며 더 효율적으로 수행 할 수있는 방법이 있다는 것을 알고 있습니다.

가 여기에 4 열 테이블의 작업 예제 난 당신이 뭘 하려는지 얻을 확실하지 않다

public function parseTable($tableHeader,$isMoney,$colNum) { 
    $tableData = $this->myArray; 
    $count = 0; 
    $placeHolder = 0; 

    while($count < count($tableData)){ 

     // This hides the column headers 
     if($count > $colNum - 1) { 
      $col1Array[$placeHolder] = $tableData[$count]; 
      $col2Array[$placeHolder] = $tableData[$count + 1]; 
      $col3Array[$placeHolder] = $tableData[$count + 2]; 
      $col4Array[$placeHolder] = $tableData[$count + 3]; 
      $placeHolder ++; 
     } 

     $count = $count + $colNum; 

    } 

    // Remove the empty lines from the array 
    $col1Array = array_values(array_filter($col1Array)); 
    $col2Array = array_values(array_filter($col2Array)); 
    $col3Array = array_values(array_filter($col3Array)); 
    $col4Array = array_values(array_filter($col4Array)); 

    // Put the 0 back in the array 
    $col1Array = array_values(str_replace('~',0,$col1Array)); 
    $col2Array = array_values(str_replace('~',0,$col2Array)); 
    $col3Array = array_values(str_replace('~',0,$col3Array)); 
    $col4Array = array_values(str_replace('~',0,$col4Array)); 

    $count = 0; 
    $tableHTML = "<table class=\"table table-striped table-hover\" data-toggle=\"table\" 
      data-search=\"true\" 
      data-show-columns=\"true\" 
      data-pagination=\"true\" 
     > 
     <thead> 
      <tr> 
       <th>$tableHeader[0]</th> 
       <th>$tableHeader[1]</th> 
       <th>$tableHeader[2]</th> 
       <th>$tableHeader[3]</th> 
      </tr> 
     </thead> 
     <tbody>"; 

    while($count < count($col1Array)){ 
     // Replaces empty values with the text set when calling the function 
     if($col1Array[$count] == ""){ 
      $col1Array[$count] = $emptyResult; 
     } 
     if($col2Array[$count] == ""){ 
      $col2Array[$count] = $emptyResult2; 
     } 
     if($col3Array[$count] == ""){ 
      $col3Array[$count] = $emptyResult3; 
     } 
     if($col4Array[$count] == ""){ 
      $col4Array[$count] = $emptyResult4; 
     } 

     // Converts data into money if specified in the function 
     if($isMoney[0] == "Currency"){ 
      if($col1Array != '0'){$colOne = money_format('%.2n', $col1Array[$count]);} 
      else{$col1Array = "$0.00";} 
     }else{$colOne = str_replace('0.00','0',$col1Array[$count]);} 
     if($isMoney[1] == "Currency"){ 
      if($col2Array != '0'){$colTwo = money_format('%.2n', $col2Array[$count]);} 
      else{$colTwo = "$0.00";} 
     }else{$colTwo = str_replace('0.00','0',$col2Array[$count]);} 
     if($isMoney[2] == "Currency"){ 
      if($col3Array != '0'){$colThree = money_format('%.2n', $col3Array[$count]);} 
      else{$colThree = "$0.00";} 
     }else{$colThree = str_replace('0.00','0',$col3Array[$count]);} 
     if($isMoney[3] == "Currency"){ 
      if($col4Array != '0'){$colFour = money_format('%.2n', $col4Array[$count]);} 
      else{$colFour = "$0.00";} 
     }else{$colFour = str_replace('0.00','0',$col4Array[$count]);} 

     $tableHTML = $tableHTML . " 
     <tr> 
      <td>$colOne</td> 
      <td>$colTwo</td> 
      <td>$colThree</td> 
      <td>$colFour</td> 
     </tr>"; 
     $count++; 
    } 

    $tableHTML = $tableHTML . " 
     </tbody> 
    </table>"; 

    $this->tableHTML = $tableHTML; 
    $this->col1Array = $col1Array; 
    $this->col2Array = $col2Array; 
    $this->col3Array = $col3Array; 
    $this->col4Array = $col4Array; 
    $this->totalRows = count($this->col1Array); 
} 
+1

n 시간 동안 자신의 자식에게 배열을 추가하는 재귀 함수를 사용 했습니까? 그 후 데이터를 추가 – UnskilledFreak

+0

나는 재귀 함수를 사용하는 것에 대해 생각조차하지 않았지만 array_push를 사용하면 내 문제에 대한 훌륭한 해결책입니다. – zadees

+0

원하는 것을 이해하는 데 어려움을 겪고 있습니다. '$ colNum'은 실제로 열의 수입니까? 치수의 개수 인 것 같습니다. – Barmar

답변

2

이 array_push있는 솔루션입니다 :

$arrayData = array(4,5,6,7,8,9,10); 
$setArray = function($colNum) use($arrayData) { 
    $new_array = array(); 
    for ($i = 0; $i < $colNum; $i++){ 
     $old_array = array(); 
     array_push($new_array, $old_array); 
    } 
    array_push($new_array, $arrayData); 
    return $new_array; 
}; 

$new_array = $setArray(5); 

echo '<pre>'; 
die(var_dump($new_array)); 
+0

나는'function ... use'에 +1을 주겠다. 그것에 대해 몰랐다. 고마워! –

+0

위대한 작품! 내 사용을위한 몇 가지 수정했다. 내가 수정 한 내용은 아래 나의 대답을 참조하십시오. – zadees

+0

익명 함수를 사용하는 이유는 무엇입니까? 왜'function setArray ($ colNum, $ arrayData)'가 아닌가? 또는 전역 변수에 접근하려면'global $ arrayData'를 사용하십시오. – Barmar

1

(코드는 아직 최적화되지 않음). 당신이 재귀 함수를 사용해야 할 것처럼 보입니다. 예를 들어

:

$array = array(); 

create_multi_array($array, 10); 

function create_multi_array(&$array, $dim){ 
    if($dim==0) 
     return; 
    create_multi_array($array[0], $dim-1); 
} 
echo "<pre>"; 
var_dump($array); 

출력 :

여기
array(1) { 
    [0]=> 
    array(1) { 
    [0]=> 
    array(1) { 
     [0]=> 
     array(1) { 
     [0]=> 
     array(1) { 
      [0]=> 
      array(1) { 
      [0]=> 
      array(1) { 
       [0]=> 
       array(1) { 
       [0]=> 
       array(1) { 
        [0]=> 
        array(1) { 
        [0]=> 
        NULL 
        } 
       } 
       } 
      } 
      } 
     } 
     } 
    } 
    } 
} 
+0

나는 HTML 표를 읽고 열을 CSV 형식으로 변환 중이다. 그런 다음 배열로 분해합니다. 이 모든 일은 내가 끝내면 데이터베이스에서 끝납니다. 문제는 열 개수에 따라 다른 함수를 만들어야한다는 것입니다. array_push()를 사용하는 재귀 함수는 내가 달성하고자하는 것으로 트릭을해야합니다. 귀하의 답변에 감사드립니다. – zadees

1

도와 주셔서 감사합니다 여러분! 나는 많은 코드를 가지고 있으며 내가 가지고있는 문제에 가능한 한 적게하려고 노력했다. 나는 그것이 혼란 스러울 수 있지만, 이것이 쉬운 문제를 안고 작은 문제라는 것을 알면서 모든 것을 올리고 싶지는 않았습니다. 배열에 배열의 변수 번호를 저장하는 효율적인 방법을 찾고 있었다. 나의 즉각적인 해결책은 저장 될 어레이의 각 수에 대한 함수를 생성하는 것이었다. 그러나, 나는 하나의 함수가 배열에 동적으로 많은 배열을 저장할 수있는 방법을 원했다. @Sofiane Sadi의 코드 덕분에 해결책이 있습니다.

$arrayData = array(array(7,8,9),array(5,6,7),array(8,9,10)); 
$setArray = function($colNum) use($arrayData) { 
$new_array = array(); 
for ($i = 0; $i < $colNum; $i++){ 
    $old_array = array(); 
} 
array_push($new_array, $arrayData); 
return $new_array; 
}; 

$new_array = $setArray(2); 

echo '<pre>'; 
die(var_dump($new_array));