Tengo una secuencia de comandos PHP que lee una gran CSV y realiza ciertas acciones, pero solo si el campo "nombre de usuario" es único. El CSV se usa en más de un script, por lo que cambiar la entrada del CSV para que solo contenga nombres de usuario únicos no es una opción.Manteniendo una matriz ordenada en PHP
El flujo del programa muy básico (que estoy preguntando) es la siguiente:
$allUsernames = array();
while($row = fgetcsv($fp)) {
$username = $row[0];
if (in_array($username, $allUsernames)) continue;
$allUsernames[] = $username;
// process this row
}
Desde este CSV en realidad podría ser bastante grande, es que in_array
bits que tiene me puso a pensar. La situación más ideal cuando se busca a través de una matriz para un miembro es si ya está ordenada, por lo que ¿cómo crearía una matriz desde cero, manteniéndola en orden? Una vez que esté en orden, ¿habría una manera más eficiente de buscarlo que usando in_array()
, teniendo en cuenta que probablemente no sepa que la matriz está ordenada?
o array_key_exists? – dylanfm
Cierto, usted también podría hacer eso, pero aún así compararía las diferencias entre esos dos. Nunca se sabe con PHP: uno podría ser O (1), mientras que el otro O (n) ... (refiriéndose al truco "do array_flip() dos veces") –
Diría que es "array_key_exists()". Los arrays de PHP son hashes, están optimizados para este tipo de cosas de acceso aleatorio. – Tomalak