Você está fundamentalmente entendendo mal como essas coisas funcionam.
O "array" em
mysql_fetch_array
não é uma matriz de todos os registros, mas uma matriz dos dados dentro do registro atual. No seu caso, você está apenas buscando um único campo, então a matriz conterá apenas um único elemento (ou seja,
$row[0]
), mas o princípio é o mesmo -- é uma matriz do único registro que você acabou de ler. Apenas os dados do registro atual estão na matriz a qualquer momento. Isso é o que
while
laço é para; ele volta a carregar cada registro um após o outro. Se você quiser criar um array que contenha todos os dados, você precisa fazer assim:
$fullData = array()
while($row = mysql_fetch_array($tableIndex) ){
$fullData[] = $row[0];
}
Isso colocará todos os dados que você está lendo em um único grande array, que é o que você espera. Agora você pode fazer o que queria fazer na pergunta:
echo $fullData[0].'<br>';
echo $fullData[1].'<br>';
echo $fullData[2].'<br>';
Espero que ajude.
Vale ressaltar aqui que o
mysql_xxx()
família de funções são preteridas e consideradas obsoletas. Se você está apenas aprendendo PHP (o que parece ser o caso), eu recomendo fortemente que você pare de aprender essas funções e aprenda o PDO
biblioteca em vez disso. É mais moderno e tem muitos recursos que o mysql
funções não podem fornecer. Além disso, versões futuras do PHP removerão o mysql
funções inteiramente, então você terá que mudar em algum momento - pode muito bem ser agora, enquanto você ainda está aprendendo. Além disso (para manter as coisas relevantes para a pergunta), a biblioteca PDO tem um recurso que de fato faz o que você procura em uma única função:
PDO::fetchAll()
. Usar este método significa que você pode buscar todos os dados em uma única grande matriz em uma linha sem a necessidade de fazer um loop while. O código ficaria um pouco assim:$sth = $dbh->prepare("SELECT name, colour FROM fruit");
$sth->execute();
$result = $sth->fetchAll();
(exemplo retirado do manual do PHP para
PDO::fetchAll
)