У меня есть эта команда 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);