Мои запросы MySQL возвращают массивы с дублирующимися записями: пронумерованные ключи и помеченные ключи с одинаковыми данными внутри. Это может быть стандартным, но это кажется пустой тратой и что-то, что может вызвать проблемы, если я печатаю значения. Я имею в виду, не огромную проблему, очевидно. Но мне просто интересно, могу ли я это остановить. Это кажется ненужным. Например:
Array( [0] => "Ted", [first_name] => "Ted", [1] => "Schmidlap", [last_name] => "Schmidlap" )
И так далее.
Я довольно новичок в этом, так что это может быть простой вопрос, но у Googling нет ответов на меня. Кто-нибудь знает причину этого? Я использую PHP PDO сейчас, но я делал это прямо через функции MySQL раньше и то же самое происходило, поэтому я предполагаю, что это побочный продукт взаимодействия с MySQL.
Я могу перебирать и отменять числовые, потому что они мне не нужны, но сейчас они действительно не в порядке, так что это просто дополнительный шаг. Тем не менее, есть ли способ просто не получить их в первую очередь?
Это зависит от функции, которую вы используете. Некоторые функции возвращают оба типа, другие возвращают только один из них.
Если вы используете PDOStatement->fetch
, обратите внимание на необязательный аргумент $ fetch_style, который требуется.
Предположительно, это происходит после использования mysql_fetch_array
(или аналогичного).
Вам нужно добавить флаг, чтобы указать, какой тип массива вы хотите вернуть, или PHP предполагает оба.
т.е. mysql_fetch_array($result_set, MYSQL_ASSOC|MYSQL_NUM|MYSQL_BOTH)
Ваша проблема mysql_fetch_array
функцией mysql_fetch_array
.
Если вы хотите только цифры, используйте:
$row = mysql_fetch_array($result, MYSQL_NUM)
Если вы хотите только текстовые индексы, используйте:
$row = mysql_fetch_array($result, MYSQL_ASSOC)
Я обычно использую MySQLi, но для PDO вы можете найти дополнительную информацию здесь: http://us3.php.net/manual/en/pdostatement.fetch.php
Это означает, что вы должны использовать это для текстовых индексов:
$row = $statement->fetch(PDO::FETCH_ASSOC);
И это для числовых индексов:
$row = $statement->fetch(PDO::FETCH_NUM);
Кроме того, просто отметим это, поскольку он не указан здесь, если вы хотите создать ассоциативный массив, вы можете использовать mysql_fetch_assoc (), или если вы хотите, чтобы нумерованный массив использовал mysql_fetch_row () вместо mysql_fetch_array (). Я использую это главным образом потому, что без него я часто забывал бы флаг, поэтому я привык использовать определенную функцию.