Я работаю над генератором имен игроков с использованием MYSQL / PHP. Как мне выбрать значения таблицы с одним столбцом (не включая первичный ключ) в одномерный массив, а затем объединить значения массива?
пример таблицы syllableInitials:
characters
t
d
ch
PHP код
$syllable = array("","","");
$sql = "SELECT characters FROM syllableInitials";
$result = $conn->query($sql);
$syllableInitials = array();
while ($initial = mysqli_fetch_row($result)) {
$syllableInitials[] = $initial;
}
$syllableMedials = array("a", "o", "i");
$syllableFinals = array("m","s","d");
$syllable[0] = $syllableInitials[0] . $syllableMedials[2] . $syllableFinals[0];
echo "Syllable is: <b>" . $syllable[0] . "</b>";
Вывод, который я получаю:
Примечание: преобразование массива в строку в строке ... Слог: Arrayim
Очевидно, что мой предполагаемый результат для приведенного выше примера кода будет «tim», а не «Arrayim».
print_r для массива syllableInitials генерирует это ...
Array (
[0] => Array ( [0] => t )
[1] => Array ( [0] => d )
[2] => Array ( [0] => ch )
)
Итак, похоже, что я каким-то образом случайно вложил массив или сделал его двумерным! Моя кодировка действительно ржавая ... заранее спасибо!






Поскольку $ initial является массивом и имеет один элемент, вы можете:
$syllableInitials[] = $initial[0];
Но лучшим решением было бы использовать PDO с его функцией PDOStatement :: fetchColumn.
Например:
$syllable = array("","","");
$options = array(
PDO::ATTR_PERSISTENT => true,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
);
$dbh = new PDO('mysql:dbname=dbname;host=127.0.0.1', 'username', 'password', $options);
$sth = $dbh->prepare('SELECT characters FROM syllableInitials');
$sth->execute();
$syllableInitials = array();
while ($initial = $sth->fetchColumn()) {
$syllableInitials[] = $initial;
}
$syllableMedials = array("a", "o", "i");
$syllableFinals = array("m","s","d");
$syllable[0] = $syllableInitials[0] . $syllableMedials[2] . $syllableFinals[0];
echo "Syllable is: <b>" . $syllable[0] . "</b>";
Это должно дать вам "tim":
$syllable[0] = $syllableInitials[0][0] . $syllableMedials[2] . $syllableFinals[0];
В вашем коде вы указываете только на другой массив внутри [0];
Array (
[0] => **Array ( [0] => t )**
[1] => Array ( [0] => d )
[2] => Array ( [0] => ch )
)
Так что у вас есть два варианта ..
Первый:
$syllable = array("","","");
$sql = "SELECT characters FROM syllableInitials";
$result = $conn->query($sql);
$syllableInitials = array();
while ($initial = mysqli_fetch_row($result)) {
$syllableInitials[] = $initial[0];
}
$syllableMedials = array("a", "o", "i");
$syllableFinals = array("m","s","d");
$syllable[0] = $syllableInitials[0] . $syllableMedials[2] . $syllableFinals[0];
echo "Syllable is: <b>" . $syllable[0] . "</b>";
Второй:
$syllable = array("","","");
$sql = "SELECT characters FROM syllableInitials";
$result = $conn->query($sql);
$syllableInitials = array();
while ($initial = mysqli_fetch_row($result)) {
$syllableInitials[] = $initial;
}
$syllableMedials = array("a", "o", "i");
$syllableFinals = array("m","s","d");
$syllable[0] = $syllableInitials[0][0] . $syllableMedials[2] . $syllableFinals[0];
echo "Syllable is: <b>" . $syllable[0] . "</b>";
но если мне просто нужен одномерный массив из таблицы с одним столбцом, зачем вообще иметь дело с вложенными / многомерными массивами?
Лучше всего этого избежать.
Изменение $ initial на $ initial [0] внутри цикла while сделало это - спасибо @ankabout! (Я уже использую mysqli, иначе попробовал бы fetchColumn () ...)