【问题标题】:Can I manipulate associative array while reading in?我可以在读入时操作关联数组吗?
【发布时间】:2015-02-18 11:58:13
【问题描述】:

我将这个数组用于数据表并将其放入关联数组中。在我使用数据表之前,我使用直接 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>';
}
?>

现在我正在使用数据表,并且从示例中我正在使用关联数组。我使用数据表的原因是为了隐藏和显示 chid 行。这是我的关联数组的示例。

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
         );

【问题讨论】:

  • 你正在做的很好。它不工作吗?也可以在数据表的列渲染回调中操作数据
  • 最后一行工作正常,但我需要做更复杂的逻辑。使用 switch 和 if 语句。
  • 那么是什么阻止您将这些 switch 和 if 语句放在您的 while 循环中?
  • 好吧,我试着这样做。我从第一个示例中复制并粘贴了 switch 语句,并将 $row[] 替换为它不起作用的关联等效项,或者我没有正确执行。只要我输入一个 if 或 switch,我就会得到一个错误。
  • 那么您需要显示您尝试过的代码并详细说明错误是什么。

标签: php jquery arrays datatable jquery-datatables


【解决方案1】:

如果我理解你,你认为你需要直接在数组定义中执行 ifs 和 while。这不是真的。你可以这样做:

$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++;
}

【讨论】:

  • 不起作用。您将把whatevers添加到父数组,而不是新的empnum/empname/etc...数组。它必须是$load['data'][index of new array]['uni3'] = ...
【解决方案2】:

您可以使用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;

【讨论】:

    【解决方案3】:

    没有理由一次性完成所有操作。您可以创建您的子数组,随心所欲地对其进行操作,然后将其填充到父数组中

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

    请注意,您不能在 ... = array(...) 定义中嵌入 if/switch。 if/switch 不是函数调用,它们没有返回值,因此可以在预期是函数调用的上下文中使用。

    【讨论】:

    • 这个!!!!我可以在索引的数组中读取吗?我可以使用索引而不是关联名称,然后将其分配为关联数组吗?示例 $foo = array() if ($row[1] == 'something) { $foo['result'] }
    • $foo['result'] = $row['some_value_from_the_db'],基本上。或者任何你想塞进新数组的东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-22
    • 1970-01-01
    相关资源
    最近更新 更多