MySQLi получить результаты и создать массив значений ключей

Я хочу построить массив с парами ключ-значение запроса 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

Решение

Вы были правы насчет своих предположений. Так как у вас есть 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 )
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]