PHP试图在while循环中向数组添加值

Posted

技术标签:

【中文标题】PHP试图在while循环中向数组添加值【英文标题】:PHP trying to add values to an array in a while loop 【发布时间】:2018-06-30 16:02:37 【问题描述】:

我想从数据库中提取行,为这些行附加一个值,然后根据一个值对这些行进行排序。问题是在尝试通过 while 循环执行此操作时出现错误:

"解析错误:语法错误,意外'=>' (T_DOUBLE_ARROW) in C:\xampp\htdocs\productivitysuite\index.php 第 98 行"

我的目标是从数据库中检索行并根据我在 PHP php ($priority) 中计算的值组织这些行,然后根据它们的优先级显示这些行的某些值。问题是我得到了这个该死的错误,我不知道为什么,也不知道在哪里寻求帮助来解决它!希望SO可以帮助诊断这一点。

代码:

<?php

$mysqli = mysqli_connect('127.0.0.1','root','', 'taskdb'); //open connection
//retrieve variables
$sql = "SELECT * FROM tasklist WHERE completion_flag = FALSE"; 
$sqldata = mysqli_query($mysqli,$sql) or die('error retrieving data');
//Display results
echo "<table>";
echo "<tr><th>Task</th><th>Type</th><th>Due Date</th>";
$counter = 0;  //may need to make global, not sure
$results = array();

while($row = mysqli_fetch_array($sqldata, MYSQLI_ASSOC))
    //store each row as variables
    if ($row['externalFlag'] == 1) 
        $E = 1;
     else
        $E = 0.5;
    
    //days until completion
    $nowDate = date("m/d/Y");
    $D = 1 / (date_diff($row['dueDate']- $nowDate));

    //Activity category multiplier
    if($row['taskType'] == "Daily")
        $C = 0.5;
     elseif($row['taskType'] == "Maintenance")
        $C =  0.2;
     elseif ($row['taskType'] == "School_Study") 
        $C = 0.75; 
     elseif ($row['taskType'] == "Personal_Project") 
        $C = 0.80;
     elseif ($row['taskType'] == "Work_Project") 
        $C = 0.65;
    

    $U = ($C - (1 / $D))* $E;  //urgency rating; SET PER ROW!

    $I =  $row['importance']; //Importance rating

    $priority = $U + $I;

    $results[] = ($row => $priority);
    //The array 

    $priorityOutput = $priorityRow.$counter;

    ++$counter;

    echo "<tr><td>";
    echo $row['taskName'];
    echo "</td><td>";
    echo $row['taskType'];
    echo "</td><td>";
    echo $row['dueDate'];
    echo "</td></tr>";

    //Make the below its own loop where I output in order of decreasing UI value


//now we have an array of key => value pairs with rows tied to a priority.
//We need to organize the rows by the priority

arsort($results);

echo "</table>"

$mysqli->close(); //close connection

?>

【问题讨论】:

您的意思是将未排序的结果集行打印到屏幕并生成要排序的新结果数组吗? @A.D.如果您打算进行编辑,请进行完整编辑并减少代码块中的制表符。 【参考方案1】:

这是您的子数组声明的语法错误。

改变

$results[] = ($row => $priority);

$results[] = array($row => $priority);

更正:$row 是一个数组,不能用作键。

我想你的意思可能是:

$results[]=array($row['taskName']=>$priority);

或许:

$results[]=array($priority=>$row);

取决于您的首选结构。

顺便说一句,我会用查找数组替换您的taskType 条件块,因为我认为代码更简洁/更紧凑,我认为它更易于维护和阅读。

【讨论】:

我没有仔细看完整的代码,但如果有足够的开发时间,也许整个准备过程可以在 sql 中完成。 使用 SQL 比使用 php 更可取吗? Sql非常擅长对数据进行排序。查询最终可能会变得有点复杂,也许不会(我现在不在我的电脑前,所以我无法仔细查看。如果你用一些相关的示例数据模拟一个 sqlfiddle 演示并将你的代码发布到 CodeReview并询问是否可以用纯sql完成,您可能会得到回应。(当然,在寻求帮助之前,请自己尝试并非常准确地了解预期的输出。)

以上是关于PHP试图在while循环中向数组添加值的主要内容,如果未能解决你的问题,请参考以下文章

从 While 循环填充 PHP 数组

Jquery,在每个循环中向数组添加值

PHP - 在while循环中分配值并在循环外单独访问它们

PHP while 循环

PHP while 循环

Php - While [data] 循环,$Post 仅返回第一个值