2012-02-13 17 views
5

Tengo un archivo con registros codes.txt como estola lectura de un archivo de matriz asociativa en php

USA 0233 
JPN 6789 
TUN 8990 
CDN 2345 

quiero leer estos contenidos del archivo a un arreglo asociativo como este.

$codes["USA"] = 0233; 
$codes["JPN"] = 6789; 
$codes["TUN"] = 8990; 
$codes["CDN"] = 2345; 

este es el código que abre el archivo para escribir. Necesito ayuda en la parte de la matriz. thks

$myFile = "codes.txt"; 
$fh = fopen($myFile, 'r'); 
$theData = fread($fh, filesize($myFile)); 
fclose($fh) 

Respuesta

2
$myFile = "codes.txt"; 
$fh = fopen($myFile, 'r'); 
$theData = fread($fh, filesize($myFile)); 
$assoc_array = array() 
$my_array = explode("\n", $theData); 
foreach($my_array as $line) 
{ 
    $tmp = explode(" ", $line); 
    $assoc_array[$tmp[0]] = $tmp[1]; 
} 
fclose($fh) 

// well the op wants the results to be in $codes 
$codes = $assoc_array; 
+0

gracias. ¿Cómo obtengo los valores? p.ej. $ codes ["CDN"] * 2 = 4690 – karto

+0

en lugar de $ assoc_array use $ codes. –

9

Es bastante sencillo. Primero lea el archivo línea por línea (por ejemplo, vea la función file que ya lo hace). A continuación, analizar cada línea mediante su división en el primer espacio (ver explode), utilice la primera parte como la clave y la segunda parte como valor:

$array = array(); 
foreach (file($myFile) as $line) 
{ 
    list($key, $value) = explode(' ', $line, 2) + array(NULL, NULL); 

    if ($value !== NULL) 
    { 
     $array[$key] = $value; 
    } 
} 

Si el analizador debe ser más específica, cambiar de acuerdo a su necesariamente. Hay a lot of string functions with PHP que se pueden utilizar para un análisis más diferenciado, como sscanf o expresiones regulares.

Otro método común es extender desde SplFileObject, permite encapsular la adquisición de datos dentro de un iterador para que pueda diferenciar mejor entre el lugar donde se usan los datos y de dónde se toma. Se puede encontrar un ejemplo en otra respuesta:

+0

Excelente respuesta. Mucho mejor de lo que tenía en mente. –

0

hay una manera óptima de hacer esto que cualquiera de estas respuestas. Puede usar las funciones file_get_contents y array_walk para cortar las cosas muy cortas.

$allCases = explode("\r\n", file_get_contents("myfile.txt")); 
$myList = array();  
array_walk($allCases, "step", $myList); 

function step($val, $key, &$arr) { 
    $aCase = explode(" ", $val); 
    $arr[$aCase[0]] = $aCase[1]; 
} 

De esta manera no necesita un bucle for o un manejador de archivos.

Tenga cuidado con el delimitador "\ r \ n" ya que esto podría depender de la plataforma en este caso.

Cuestiones relacionadas