2014-12-19 3 views
0

Я привожу этот массив для данных и помещаю его в ассоциативный массив. Прежде чем я использовал DataTables я использовал прямой PHP, чтобы создать свою таблицу и может манипулировать индексированную arrray, вот примерМогу ли я манипулировать ассоциативным массивом во время чтения?

<?php 
    foreach ($types as $val) { 
    setlocale(LC_MONETARY, 'en_US'); 
    echo '<tr>'; 
    echo '<td>' . $val[0] . '</td>'; 
    echo '<td>' . $val[1] . '</td>'; 
    echo '<td>' . $val[5] . '</td>'; 
    echo '<td>' . number_format($val[2] * .01, 2) . '</td>'; 
    echo '<td>' . $val[3] . '</td >'; 
    echo '<td>' . money_format('%2n', $val[4] * .01) . '</td>'; 



    switch ($val[5]) { 
     case 'S'; 
      echo '<td>' . money_format('%2n', $val[3]) . '</td>'; 
      break; 
     case 'U'; 
      echo '<td>U</td>'; 
      break; 
     case 'H': 
      $totalHourly = ($val[2] * .01) * ($val[4] * .01); 
      echo '<td>' . $totalHourly . '</td>'; 
      break; 
     case 'M': 
      echo '<td>M</td>'; 
      break; 
     default; 
      if ($val[2] > 0) { 
       $totalGross = ($val[2] * .01) * ($val[4] * .01); 
       echo '<td>' . money_format('%.2n', $totalGross) . '</td>'; 
      } else { 
       echo '<td>' . money_format('%.2n', $val[3]) . '</td>'; 
      } 
    } 

    echo '<td><a href=EmployeeInfo.php?empNum=' . $val[0] . '>Info</a></td>'; 
    echo '<td><a href=EmployeePayroll.php?empNum=' . $val[0] . '>Payroll</a></td>'; 
    echo '</tr>'; 
} 
?> 

Теперь я использую DataTables и из примера я использую ассоциативный массив. Причина, по которой я использую datatables, - это прямая строка show and show. Вот пример моего ассоциативного массива.

while ($row = db2_fetch_array($stmt)) { 

     $load['data'][] = array(
      'empNum' => $row[0], 
      'empName' => $row[1], 
      'unitRate' => $row[2], 
      'salary' => $row[3], 
      'hourly' => $row[4], 
      'appFlag' => $row[5], 
      'app1' => $row[6], 
      'app2' => $row[7], 
      'app3' => $row[8], 
      'app4' => $row[9], 
      'app5' => $row[10], 
      'uni1' => $row[11], 
      'uni2' => $row[12], 
      'uni3' => $row[13], 
      'uni4' => $row[14], 
      'uni5' => $row[15], 
      'gross' => ($row[2] * .01) * ($row[4] * .01) 
     ); 
    } 

Самая последняя строка - это самый простой способ манипулирования этим массивом. Есть ли способ применить одну и ту же логику к моему ассоциативному массиву так же, как я сделал свой индексированный массив? А если нет, то какой лучший способ добавить логику, а затем создать ассоциативный массив?

Это то, что я сделал.

while ($row = db2_fetch_array($stmt)) { 
      $empNum = $row[0]; 
      $empName = $row[1]; 
      $unitRate = $row[2]; 
      $salary = $row[3]; 
      $hourly = $row[4]; 
      $appFlag = $row[5]; 
      $app1 = $row[6]; 
      $app2 = $row[7]; 
      $app3 = $row[8]; 
      $app4 = $row[9]; 
      $app5 = $row[10]; 
      $uni1 = $row[11]; 
      $uni2 = $row[12]; 
      $uni3 = $row[13]; 
      $uni4 = $row[14]; 
      $uni5 = $row[15]; 

     switch ($row[5]) { 
      case 'S'; 
       $gross = $row[3]; 
       break; 
      default; 
       if ($row[2] > 0) { 
        $gross = ($row[2] * .01) * ($row[4] * .01); 
       } else { 
        $gross = $row[3]; 
       } 
     } 

     $load['data'][] = array(
      'empNum' => $empNum, 
      'empName' => $empName, 
      'unitRate' => $unitRate, 
      'salary' => $salary, 
      'hourly' => $hourly, 
      'appFlag' => $appFlag, 
      'app1' => $app1, 
      'app2' => $app2, 
      'app3' => $app3, 
      'app4' => $app4, 
      'app5' => $app5, 
      'uni1' => $uni1, 
      'uni2' => $uni2, 
      'uni3' => $uni3, 
      'uni4' => $uni4, 
      'uni5' => $uni5, 
      'gross' => $gross 
     ); 
+0

Что вы делаете, это нормально. Разве это не работает? Может также манипулировать данными в обратном обращении столбцов данных datatables – charlietfl

+0

Последняя строка работает отлично, но мне нужно сделать более сложную логику. С операторами switch и if. – moe

+1

Итак, что мешает вам помещать этот переключатель и если утверждения в вашем цикле while? – charlietfl

ответ

0

Нет причин делать все за один выстрел. Вы можете создать свой массив ребенка, манипулировать им, однако вы хотите, то запихнуть его в родительском массиве

$foo = array() 
$foo['empnum'] = ... 
... 
$foo['gross'] = $foo['x'] * $foo['y']; 
if (...) { 
    $foo['if_results'] = ... : 
}  
$data[] = $foo; 

Обратите внимание, что вы не можете встраивать, если переключатель/внутри ... = array(...) определения. if/switch не являются функциональными вызовами, они не имеют возвращаемых значений и поэтому могут использоваться в контексте, где они ожидали, что это вызовы функций.

+0

ЭТО !!!!! Могу ли я читать в массиве, индексированном. Можно ли использовать индекс вместо ассоциативного имени, а затем назначить его как ассоциативный массив? Пример $ foo = array() if ($ row [1] == 'something) {$ foo [' result ']} – moe

+0

'$ foo [' result '] = $ row [' some_value_from_the_db ']', в основном. или что еще вы хотите вложить в новый массив. –

0

Вы можете использовать foreach конструкцию, чтобы пройти через ваш ассоциативный массив и манипулировать его содержание:

$data = array(
     'empNum' => $row[0], 
     'empName' => $row[1], 
     'unitRate' => $row[2], 
     'salary' => $row[3], 
     'hourly' => $row[4], 
     'appFlag' => $row[5], 
     'app1' => $row[6], 
     'app2' => $row[7], 
     'app3' => $row[8], 
     'app4' => $row[9], 
     'app5' => $row[10], 
     'uni1' => $row[11], 
     'uni2' => $row[12], 
     'uni3' => $row[13], 
     'uni4' => $row[14], 
     'uni5' => $row[15], 
     'gross' => ($row[2] * .01) * ($row[4] * .01) 
    ); 
foreach($data as $key => $value) { 
    $data[$key] = 1; // add your complicated logic here 
} 
$load['data'][] = $data; 
0

Если я вас понимаю хорошо вы думаете, что вам нужно сделать МСФ и в то время как непосредственно в Defenition массива. И это неправда. Вы можете сделать это следующим образом:

$count = 0; 
while ($row = db2_fetch_array($stmt)) { 
     $load['data'][] = array(
      'empNum' => $row[0], 
      'empName' => $row[1], 
      'unitRate' => $row[2], 
      'salary' => $row[3], 
      'hourly' => $row[4], 
      'appFlag' => $row[5], 
      'app1' => $row[6], 
      'app2' => $row[7], 
      'app3' => $row[8], 
      'app4' => $row[9], 
      'app5' => $row[10], 
      'uni1' => $row[11], 
      'uni2' => $row[12], 
      'uni3' => $row[13], 
      'uni4' => $row[14], 
      'uni5' => $row[15], 
      'gross' => ($row[2] * .01) * ($row[4] * .01) 
     ); 
     if <condition> { 
      $load['data'][$count]['uni3'] = <whatever>; 
      $load['data'][$count]['gross'] = <whatever>; 
     } else { 
      $load['data'][$count]['uni5'] = <whatever>; 
      $load['data'][$count]['gross'] = <whatever2>; 
     } 
     <any other code you what> 
     $count++; 
} 
+0

не будет работать. вы добавите whatevers в родительский массив, а не в новый массив empnum/empname/etc .... это должно быть '$ load ['data'] [index of new array] ['uni3'] = ...' –

+0

Вы правы. Спасибо @MarcB, я исправлю это. –

Смежные вопросы