未定义的索引仅在使用数组时

时间:2011-11-05 09:18:33

标签: php arrays indexing undefined

我希望有一个SelectAll函数,它接受一些参数(类,表,排序字段和排序顺序。)这些注释解释了发生了什么(或者应该是什么。)

  public static function SelectAll($class, $table, $sort_field, $sort_order = "ASC")
  {

    /* First, the function performs a MySQL query using the provided arguments. */

    $query = "SELECT * FROM " .$table. " ORDER BY " .$sort_field. " " .$sort_order;
    $result = mysql_query($query);

    /* Next, the function dynamically gathers the appropriate number and names of properties. */

    $num_fields = mysql_num_fields($result);
    for($i=0; $i < ($num_fields); $i++)
    {
      $fetch = mysql_fetch_field($result, $i);
      $properties[$i] = "'".$fetch->name."'";
    }
    /*echo [$properties[0]; echo "<br />";}*/
    /* Finally, the function produces and returns an array of constructed objects. */

    while($row = mysql_fetch_assoc($result))
    { 
      for($i=0; $i < ($num_fields); $i++)
      {
        $args[$i] = $row[$properties[$i]];
      }
      $array[] = call_user_func_array(new $class, $args);
    } return $array; }

现在,我遇到的问题是$row[$properties[$i]]导致'未定义的索引'。

在函数收集字段的数量/名称并将它们存储在数组中之后,我可以回显$properties[0]的值,它显示应该是'id',但是$row[~anything here~]除非我手动输入值,例如$row['id'],否则将无法工作。你可以想象非常令人沮丧和困惑。

为什么这不起作用?是否有任何解决方案或其他方法来完成此功能?

1 个答案:

答案 0 :(得分:0)

我看到您的$properties[$i]数组项具有引用等值"'id'", 所以$row[$properties[$i]]&lt; ==&gt; $row["'id'"]!= $row["id"];

您可能希望在$result === false

之后检查$result = mysql_query($query);

无论如何,我认为您可以将此功能替换为此功能(除非您构建它仅用于演示):

public static function SelectAll($class, $method_name, $table, $sort_field, $sort_order = "ASC"){
  /* First, the function performs a MySQL query using the provided arguments. */
  $query = "SELECT * FROM " .$table. " ORDER BY " .$sort_field. " " .$sort_order;
  $result = mysql_query($query);

  while($row = mysql_fetch_array($result))
    $array[] = call_user_func_array(array($class,'__construct'), $row);

  return $array;
}