Можно ли манипулировать ассоциативным массивом при чтении в?

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

    <?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>';
}
?>

Теперь я использую таблицы данных и из примера использую ассоциативный массив. Причина, по которой я использую таблицы данных, — это строка прятки и прятки. Вот пример моего ассоциативного массива.

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

Решение

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

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

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

0

Другие решения

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

$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

Если я вас хорошо понимаю, вы думаете, что вам нужно делать ifs и whiles непосредственно в определении массива. И это не правда. Вы можете сделать это так:

$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
По вопросам рекламы [email protected]