【问题标题】:MySQLi get results and create key value arrayMySQLi 获取结果并创建键值数组
【发布时间】:2016-02-24 00:18:27
【问题描述】:

我想用 MySqli 查询的键值对构建一个数组。到目前为止,我所拥有的内容会覆盖数组的条目:

$array = array();

    while($row = mysqli_fetch_array($result))
    {
        $difference = abs($base - $row["sql_number"]);
        $array = [$difference => $row["sql_number"]];
        $bar = each($array);
        print_r($bar);
    }

    echo count($array);
    ksort($array);
    echo count($array);

    foreach ($array as $key => $value) {             
        echo "Key: ".$key;
        echo "Value: ". $value;
    }

print_r($bar); 打印的键值对是正确的,但我确信这是因为它只打印了来自 mysqli_fetch_array($result) 的最新条目,并且之前的条目被覆盖了。 我想创建这样一个数组,然后按键值使用ksort 对其进行排序。

【问题讨论】:

  • 你在这里打错了foreach ($arrayas,应该读作foreach ($array as。如果那是您的真实代码,则错误报告将引发未定义的数组变量通知。如果您使用的是foreach ($array as,请解决您的问题。
  • 由于您不想覆盖该值,请尝试$array[] = [$difference => $row["sql_number"]];。这将防止相同的difference 也被覆盖,但请注意,在下一个foreach 中,value 将是array。你能发布最终数组的所需结构吗?
  • @Fred-ii- 已修复。谢谢!
  • 不客气,Lenny。
  • @FirstOne 我已根据您的建议进行了更改,但现在当我想在我的 foreach 循环中访问键值时,它给了我一个错误:Array to string conversion。我猜这种技术可以构建数组?

标签: php mysql arrays mysqli key-pair


【解决方案1】:

您的假设是正确的。由于循环中有print_r,即使它每次都替换值,您也每次都打印它。

这一行:

$array = [$difference => $row["sql_number"]];

应该是这样的:

$array[$difference] => $row["sql_number"];

这样,您将跟踪以前的值 (keys) 并添加新值。


这个例子说明了问题:

$a = array('ok' => 'fine');
$b['ok'] = 'fine';

print_r($a); // Array ( [ok] => fine ) 
echo '<br>';
print_r($b); // Array ( [ok] => fine )
echo '<br><br>';

$a = array('ok2' => 'fine2');
$b['ok2'] = 'fine2';

print_r($a); // Array ( [ok2] => fine2 ) 
echo '<br>';
print_r($b); // Array ( [ok] => fine [ok2] => fine2 ) 
echo '<br><br>';

我只想提一下,您不能忘记这将覆盖之前的differences在这种情况下,相同的$row["sql_number"]-s 会产生相同的差异,因此可能不是问题。还是值得一提的。这个问题的例子:

$b['ok'] = 'fine';
print_r($b); // Array ( [ok] => fine )     

echo '<br><br>';

$b['ok'] = 'fine2';
print_r($b); // Array ( [ok] => fine2 ) 

【讨论】:

    猜你喜欢
    • 2010-12-02
    • 2016-05-27
    • 1970-01-01
    相关资源
    最近更新 更多