В таблице базы данных у меня есть столбец Значение. Имеет более 50 строк. Теперь в php у меня есть фиксированный массив из 10. Сначала 10 строк будут выбраны из базы данных и сохранены в массив. Когда массив заполнится, и 11-е значение будет пытаться вставить в массив, 0-е значение будет перемещено, а 11-е значение будет вставлено в массив. Например, как процесс QUEUE.
Сначала это покажет
[[0,17.9999],[1,13.898],...[9,16.98]]
затем [0,17.9999] will move and [10,11.88]
вставит и напечатает следующим образом
[[1,13.898],.......[9,16.98],[10,11.88]]
затем
[2,17.84],......[10,11.88],[11,999]]
и так далее..
Как я могу представить это в php?
Вот мой код:
<?php
include("md.php");
$sql = "SELECT * from datatable";
$result =oci_parse($conn, $sql);
$r=oci_execute($result);
$arr = array();
$i=0;
while($row = oci_fetch_array($stid,OCI_ASSOC)){
$arr[] = array_shift(array($i++, (float)$row['VALUE']));
}
echo json_encode($arr);
?>
Пожалуйста помоги.
Если у вас всегда есть 10 ключей в массиве, попробуйте
$arr=array_slice($arr,1,9);
$arr[]=$row['VALUE'];
вместо
$arr[] = array_shift(array($i++, (float)$row['VALUE']));
Обратите внимание, это будет правильно, когда у вас уже есть массив с 10 элементами.
Смотрите пример ниже
$arr = array(1,2,3,4,5,6,7,8,9,10);
echo json_encode($arr)."<br>";
$con = mysqli_connect('127.0.0.1','app_user2','qwe123','test');
$select="select id from adv where id > 300 and id < 312;";
$res = mysqli_query($con, $select);
while ($row=$res->fetch_assoc()) {
$arr=array_slice($arr,1,9);
$arr[]=$row['id'];
echo json_encode($arr)."<br>";
}
В браузере это будет представлено как
[1,2,3,4,5,6,7,8,9,10]
[2,3,4,5,6,7,8,9,10,"301"]
[3,4,5,6,7,8, 9,10,"301","302"]
[4,5,6,7,8,9,10,"301","302","303"]
[5,6,7,8,9,10,"301","302","303","304"]
[6,7,8,9,10,"301","302","303","304","305"]
[7,8,9,10,"301","302","303","304","305","306"]
[8,9,10,"301","302","303","304","305","306","307"]
[9,10,"301","302","303","304","305","306","307","308"]
[10,"301","302","303","304","305","306","307","308","309"]
["301","302","303","304","305","306","307","308","309","310"]
["302","303","304","305","306","307","308","309","310","311"]
Если я понимаю, из 50 записей вы получите только 10, а 11-е — это отталкивание 1-го значения массива … Это похоже на получение последних 10 результатов, не так ли?
Допустим, что в вашей таблице есть автоматически увеличенное поле ‘id’:
<?php
include("md.php");
// I've changed your SQL query by adding a reverse sort
// on the 'id' field and put a limit of 10 entries
$sql = "SELECT * from datatable ORDER BY id DESC LIMIT 0,10";
$result =oci_parse($conn, $sql);
$r=oci_execute($result);
$arr = array();
$i=0;
while($row = oci_fetch_array($stid, OCI_ASSOC)){
$arr[] = (float)$row['VALUE'];
}
echo json_encode($arr);
?>
Я не проверял этот фрагмент, но он должен работать нормально;)
РЕДАКТИРОВАТЬ: Пожалуйста, игнорируйте, если Илья ответ, что вы хотите сделать D: