У меня есть таблица с 6 столбцами
Сортировать как:
База данных -> дети
|CANDY | COLOR | DRINK | PET | SONG | TOY |
---------------------------------------------------
|cookie | blue | juice | dog | if | ball |
|cake | red | coke | cat | ask | doll |
Я хочу хранить
Array
называется Candy[];
color[];
drink[];
так далее….Мне удалось создать массивы с именами столбцов с FORLOOP
с этими строками, которые отлично работают:
$ fieldName = mysqli_fetch_field_direct ($ result, $ i) -> name;
$ {$ fieldName} = array ();
Но когда код попадает в часть WHILE, которая также находится внутри цикла, чтобы добавить элементы столбцов внутри массивов [], он добавляет только первый элемент и возвращается в FORLOOP, идет и добавляет один элемент в следующий массив [ ] и переходит к следующему массиву [] ….
while($row = mysqli_fetch_array($result)){
//inserts itens in the "$array" with columns name
${$fieldName}[] = $row[$i];
}
Если я попытаюсь "echo"
arrays[]
и не ставь "BREAK"
в конце WHILE
, Возвращает ошибку
«Неопределенное смещение: 0 в строке …»
И когда я положилBREAK
«, это работает для:
echo candy[0]; = cookie
но не работает для:
echo candy[1]; = Undefined offset: 1 in line...
Вот весь код:
$sql="SELECT candy, color, drink, pet, song, toy FROM kids";
$result = mysqli_query($con,$sql);
$colNumber = mysqli_num_fields($result);
for($i=0;$i<=$colNumber -1;$i++){
$fieldName = mysqli_fetch_field_direct($result, $i)->name;
echo . $fieldName . "<br /><br />";
//Creates an Array with Coll Name from DB
//with dynamic-variable ${$fieldname}
${$fieldName} = array();
while($row = mysqli_fetch_array($result, MYSQLI_NUM)){
//inserts the received itens into the array ${$fieldName}
${$fieldName}[] = $row[$i];
printf ("%s (%s)\n", $row[$i], $row[1]);
}
echo ${$fieldName}[0];
echo candy[0];
echo ${$fieldName}[1];
echo candy[1];
echo "<hr />";
}
Код WHILE работает, когда он не находится внутри FORLOOP
и если я сделаю query()
лайк:
SELECT candy FROM kids.
Но тогда, вот так, мне понадобилось бы 600 строк повторяющегося кода, чтобы получить то, что я хочу, и копировать / вставлять снова и снова для каждого нового столбца в таблице БД.
Есть идеи?
Мне нужно, чтобы поместить массивы в HTML
<SELECT><OPTION></SELECT>
затем используйте mt_rand()
перетасоватьprofiles
«. Это не будет использоваться с детскими вещами, это был только пример.
Это будет создатель виртуального преступления, который будет перетасовывать переменные, чтобы создать другую гипотезу преступления для работы студентов юридического факультета.
Я уже потратил 3 дня на чтение документации http://php.net/manual/pt_BR/mysqli-result.fetch-array.php
и «погуглил» это, но не смог найти никакого ответа.
Нашел способ сделать это. Я перевел код на английский, чтобы другие могли его получить. Если имя переменной неверно, исправьте ее, используя комментарии, и наслаждайтесь!
$sql = "SELECT parquet, defendant, action, modusOperandi, victim, crime FROM crime_elements";
//runs '$sql' query to get database data
$result = mysqli_query($con,$sql);
$collNumber = mysqli_num_fields($result);
echo "ColL Number :" . $collNumber;
// Creates $data Array[]
$data = array();
while($row = mysqli_fetch_array($result)){
//inserts received data into "$data" and makes available by array[]index
$data[] = $row;
}
for($i=0;$i<=$collNumber -1;$i++){
// Gets the column name from the query()
$fieldName = mysqli_fetch_field_direct($result, $i)->name;
echo "</br><b>Coll Name:</b> " . $fieldName . "<br /><br />";
${$fieldName} = array_column($data, $i);
print_r(${$fieldName});
echo "<br /><b>Specified item choice[]:</b> ". ${$fieldName}[2];
echo "<hr />";
}
Других решений пока нет …