尝试将数组重置为行的第一个值

时间:2012-12-08 20:42:16

标签: php

我正在编写一个显示表格的功能,可以选择编辑和删除数据。我需要这些表几次,所以这就是我创建函数的原因。

这是函数的调用方式:

listSpecific(customer, array("CustomerID", "Forename", "Surname", "Email", "Secret Q", "Secret A", "Street", "City", "Postcode", "Type"), array("customerid", "forename", "surname", "email", "secretQ", "secretA", "address_street", "address_city", "address_postcode", "member_type"));

这是完整的功能:

function listSpecific($DBname, $titles=array(), $values=array()){
$numValues = count($values);
$i=0;
$sql = "SELECT ";

//Construct SQL Statement
foreach ($values as $val)
{
    //Last Element of the array
    if(++$i === $numValues){
        $sql .= $val;
        $sql .= " ";
    }
    else{
        //The rest of the array elements
        $sql .= $val;
        $sql .= ", ";    
    }

}

$sql .= "FROM $DBname;";

//End of Constructing SQL Statement

// Execute Query
$result = mysql_query($sql) or die("An error has ocured: " . mysql_error() . ":" . mysql_errno());


//Construct table
$list = "<table>";
$list .= "<tr>";

//Cycle through array elements to get table headers
foreach ($titles as $title) {
    $list .= "<th>$title</th>";
}

$list .= "<th>";
$list .= "Task";
$list .= "</tr><tr>";


$numValues = count($values);
$i=0;
//Construct the rest of the table [NOT WORKING]
while ($table = mysql_fetch_array($result)) {

    $item = array();
    foreach($values as $val){
        //Last Element of the array
        if(++$i === $numValues){
            $list .= "<td>";
        $item = $table[$val];
        $list .= $item;
        $list .= "</td>"; 


        //Get the Item ID
        $firstElement = reset($table);
        $list .= "<td><a href=\"users.php?task=delete&user=$firstElement\">Delete</a></td></tr>";
        }
        else{
            //The rest of the array elements
        $list .= "<td>";
        $item = $table[$val];
        $list .= $item;
        $list .= "</td>";   
        }

    }
}

echo $list;

}

问题是创建删除超链接,因为我需要将传递给URL的用户ID。

问题出在这一行:

        //Get the Item ID
        $firstElement = reset($table);
        $list .= "<td><a href=\"users.php?task=delete&user=$firstElement\">Delete</a></td></tr>";

我明白为什么会出错,它会回到数组的第一项,即用户ID。但它必须是排的唯一。

例如,在第一行,用户ID为57。 但是在下一行58并且更改了超链接。

对此的一个便宜的解决方案是每次在while循环中返回11个值,然后从它停止的位置继续。怎么可以实现呢?

谢谢。

2 个答案:

答案 0 :(得分:1)

如果您希望主键列始终是$values数组的第一个元素,那么您可以将其称为$values[0]。也就是说,

while ($table = mysql_fetch_array($result)) {
    foreach($values as $val) {
        $list .= '<td>'.$table[$val].'</td>';
    }
    $list .= '<td><a href="users.php?task=delete&user='.$table[values[0]].'">Delete</a></td></tr>';
}

我还整理了我觉得合适的循环。

答案 1 :(得分:0)

您应该使用array_shift代替并将$ firstElement赋值放在第一个循环中。

$firstElement = array_shift($table);

array_shift返回第一个元素而不重置数组中的索引。