У меня есть эта команда SQL:
SELECT Username FROM Family WHERE Parent = '$Username' LIMIT 10
Когда я запускаю эту команду на моем PHPMyAdmin и помещаю в нее несколько $ Username, у меня есть это в результате:
+----------+ | Username | +----------+ | johndoe | +----------+
но когда я пытаюсь создать такую функцию:
function userParent($Username) { global $con; $Result = mysqli_query($con, "SELECT Username FROM Family WHERE Parent = '$Username' LIMIT 10"); $Result = mysqli_fetch_array($Result); return $Result; }
У меня есть этот массив в ответ:
Array ( [0] => johndoe [Username] => johndoe )
Поэтому, когда я называю эту функцию на моем скрипте, используя цикл foreach, как это:
$Parent = userParent('james'); foreach ($Parent as $value){ echo $value . '<br>'; }
У меня всегда есть дубликат «johndoe» взамен. Я считаю, что это повторяющиеся строки, вызванные mysqli_fetch_array. Как решить эту повторяющуюся строку из mysqli_fetch_array?
благодаря
mysqli_fetch_array()
возвращает как ассоциативный, так и числовой массив ваших результатов MySQL. mysqli_fetch_assoc()
этого используйте mysqli_fetch_assoc()
.
Это не обман, это описано в http://php.net/mysqli_fetch_array . По умолчанию функция возвращает массив с двумя ключами (числовая + строка). если вы хотите только один тип, используйте конкретную
mysqli_fetch_row() [numeric only] mysqli_fetch_assoc() [keyed only] or mysqli_fetch_array($result, $fetch_mode);
См. mysqli_fetch_assoc
. Эта функция исключает часть с индексированной численностью.
Проверьте документы: http://php.net/manual/en/mysqli-result.fetch-array.php. Он возвращает то, что он должен.
По умолчанию он использует MYSQLI_BOTH
, поэтому массив имеет как * числовые, так и ассоциативные ключи. Передайте MYSQLI_ASSOC
или MYSQLI_NUM
в качестве второго параметра для mysqli_fetch_array
чтобы получить только один тип индекса.
$Result = mysqli_fetch_array($Result, MYSQLI_NUM);