【问题标题】:Array or Assoc?数组还是关联?
【发布时间】:2010-11-21 17:26:50
【问题描述】:

我正在尝试将 MySQL 表中的数据存储到 PHP 数组变量中。

目前,我有这个:

$row = $db->query("SELECT * FROM settings");
$sysconfig = $row->fetch_array();

数据库方案是这样的:

property value
online     1
autoupd    1
setting    1

等等

我应该如何编写上面的代码,以便我可以将值用于数据中的属性,即

$sysconfig['online'] 会返回“1”吗?

var_dump($sysconfig) 产生这个

array(6) { [0]=> string(6) "online" ["property"]=> string(6) "online" [1]=> string(1) "1" ["propertyid"]=> string(1) "1" [2]=> string(1) "1" ["value"]=> string(1) "1" }

print_r($sysconfig) 产生这个

Array ( [0] => online [property] => online [1] => 1 [propertyid] => 1 [2] => 1 [value] => 1 )

谢谢

【问题讨论】:

  • 嗯……和你写的完全一样? :)
  • 我明白了:未定义索引:在线作为 PHP 通知。
  • var_dump($sysconfig)更新您的问题
  • 添加了var_dumpprint_r
  • 啊,现在更有意义了。您必须遍历每一行,直到找到propertyonline 的那一行。或者,直接查询

标签: php mysql arrays associative-array


【解决方案1】:

fetch_array 返回关联数组和枚举数组。您可以通过添加 MYSQL_ASSOC 参数来指定它只返回 assoc 数组。或者你可以使用fetch_assoc 方法。

UPD:对于您的方案,您只有“属性”和“值”列,因此您需要使用连接重写您的选择查询或像这样遍历数据集:

$sysconfig = array();
while ($line = $row->fetch_assoc())
    $sysconfig[ $line['property'] ] = intval($line['value']);

//$sysconfig['online'] == 1

【讨论】:

  • 不能使用 mysqli_result 类型的对象作为数组
  • @Shamil:抱歉,错字,在 while 循环中应该是 $line 而不是 $row。
【解决方案2】:

您使用的类是什么样的?我通常建议使用类似的东西:

$sysconfig = mysql_fetch_assoc($row);

将返回该行的数组。您的 $db 类是否有此方法?如果您执行以下操作会发生什么:

print_r($sysconfig);

您应该会看到返回数组的细分,其中将突出显示您可以使用哪些方法来访问其中的数据。

编辑:

替换这一行:

$sysconfig = $row->fetch_array();

与:

while($data = $row->fetch_array()){
    $sysconfig[$data['property']] = $data['value'];
}

然后您应该能够根据需要访问结果。

【讨论】:

  • 我使用的是普通类:$db = new mysqli(connection details, tablename)
  • 你能发布 print_r($sysconfig) 或 var_dump($sysconfig) 的结果吗?
  • 我已将print_r 添加到问题中。
【解决方案3】:
$result = $db->query("SELECT * FROM settings");

while ($row = mysql_fetch_assoc($result)) {
    echo $row["online"];
    echo $row["autopd"];
    echo $row["setting"];
     // etc.
}

【讨论】:

  • 不需要回显。即使这样,变量数组也没有保存。
  • echo 只是一个示例用法。您能否详细说明“变量数组未保存”的含义?是否进入 while 循环(否则您的查询不会返回结果)。如果它正在进入外观,也许你可以做 print_r($row);在循环中。
【解决方案4】:
$row = $db->query("SELECT * FROM settings");
while($data = $row->fetch_array())
   $sysconfig[$data['property']] = $data['value'];

【讨论】:

    猜你喜欢
    • 2010-11-07
    • 1970-01-01
    • 2011-06-05
    • 2012-01-19
    • 1970-01-01
    • 2010-11-22
    • 2011-03-31
    • 1970-01-01
    • 2014-09-30
    相关资源
    最近更新 更多