MySQLi获得结果并创建键值数组

时间:2015-11-21 15:03:03

标签: php mysql arrays mysqli key-pair

我想构建一个具有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对其进行排序。

1 个答案:

答案 0 :(得分:2)

你对自己的假设是正确的。由于循环中有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>';

我只是想提到你 CAN&#39; FORGET 这将覆盖之前的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 )