Fetch array function duplica valores em cada posição de matriz?

Estou recebendo comportamento estranho dessa function.

Entrada

public function fetch_array($result_set) { $rows = array(); while ($row = mysql_fetch_array($result_set)) { $rows[] = $row; print_r($row); break; } return $rows; } 

Eu fiz a function executar uma vez, mas está duplicando uma linha do meu resultado da consulta MySQL.

Saída

 Array ( [0] => Sarah [first_name] => Sarah [1] => Palin [second_name] => Palin ) 

Deveria ser

Saída correta

 Array ( [first_name] => Sarah [second_name] => Palin ) 

Eu usei esse exemplo de pergunta SO

Use mysql_fetch_array () com foreach () em vez de while ()

Não a minha consulta ou a falha de resultado do Mysql

View post on imgur.com

insira a descrição da imagem aqui


o que há de errado aqui?

Isso não é um erro, é o comportamento pretendido de mysql_fetch_array() http://us.php.net/manual/en/function.mysql-fetch-array.php

Você pode definir o sinalizador result_type , ou você pode usar mysql_fetch_assoc() vez disso. http://us.php.net/manual/en/function.mysql-fetch-assoc.php

Ao usar o mysql_fetch_array, alimente o sinalizador MYSQL_ASSOC.

EDITAR: Aqui está seu código, com a mudança apropriada

 while ($row = mysql_fetch_array($result_set, MYSQL_ASSOC)) 

Além disso, você pode obtê-los com apenas os índices numéricos, alimentando-o MYSQL_NUM

A razão pela qual você obtém um resultado e quer o outro é porque você está empurrando uma matriz ($ row) dentro de uma nova matriz ($ rows). Ao empurrar algo em uma matriz (os suportes que você usa), você obtém uma chave de incremento automático.

tente isso:

 $rows['name'] = $row['name']; $rows['second_name] = $row['second_name']; 

ao invés de

 $rows[] = $row; 

Por padrão mysql_fetch_array tem duas chaves para cada coluna de database – uma com a chave numérica e outra com a chave associativa. Você pode fazer isso para dizer apenas para buscar as teclas numéricas:

 mysql_fetch_array($result, MYSQL_NUM); 

http://us2.php.net/manual/en/function.mysql-fetch-array.php

É um comportamento completamente normal e esperado. Se você quiser apenas a matriz associativa, use

 while ($row = mysql_fetch_array($result_set, MYSQL_ASSOC))