получить 2 столбца из таблицы в 2 массива php mysql

У меня есть таблица с 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

и «погуглил» это, но не смог найти никакого ответа.

1

Решение

Нашел способ сделать это. Я перевел код на английский, чтобы другие могли его получить. Если имя переменной неверно, исправьте ее, используя комментарии, и наслаждайтесь!

$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 />";
}
2

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

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

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