Ver Mensaje Individual
  #18 (permalink)  
Antiguo 01/12/2010, 01:24
Avatar de metacortex
metacortex
Viejo demente
 
Fecha de Ingreso: junio-2004
Ubicación: Caracas - Venezuela
Mensajes: 9.027
Antigüedad: 19 años, 11 meses
Puntos: 832
Respuesta: Problema con array

Bueno a estas alturas me decanté por la propuesta de las expresiones regulares. Le agregué la clave porque lo utilizaré para fijar la línea del archivo donde se va a escribir la línea:

Código PHP:
Ver original
  1. foreach($leer as $k => $l){
  2.     preg_match('/^(\w+(?:\[\d\])?).*/is', $l, $m);
  3.     if(!empty($m[1])){ $arr[$n][$m[1]] = $k + 1 .' '. $m[0]; $bool = false; }
  4.     elseif(!$bool && empty($m[1])){ $bool = true; $n++; }
  5. }

Cada array resultante luce de esta forma:

Código PHP:
Ver original
  1. [2] => Array
  2.         (
  3.             [msgid] => 28 msgid "No media attachments found."
  4.  
  5.             [msgstr] => 29 msgstr "No hay archivos que mostrar."
  6.  
  7.         )

Ahora bien, se hizo necesario extraer info por separado de cada línea para convertirla en datos que pueda usar. Hice el foreach para que se reconociera cada array (y sus elementos) como una iteración individual y -aquí creo que está el error- un bucle interno for para meterle el preg_match_all y separar por fin los datos:

Código PHP:
Ver original
  1. foreach($arr as $a) {
  2.     $values = array_values($a);
  3.     for ($i = 0; $i < count($values); $i++) {
  4.         preg_match_all('/^(.*?) (.*?) "(.*?)"/i', $values[$i], $salida, PREG_SET_ORDER);
  5.     }
  6. }

Cada iteración me devuelve lo esperado. Este print lo hice desde dentro del for (se muestra todo el array correctamente):

Código PHP:
Ver original
  1. (
  2.     [0] => Array
  3.         (
  4.             [0] => 29 msgstr "No hay archivos que mostrar."
  5.             [1] => 29
  6.             [2] => msgstr
  7.             [3] => No hay archivos que mostrar.
  8.         )
  9.  
  10. )
Pero el HTML debo construirlo desde el foreach y ahí se jode todo porque los datos comienzan a mostrarse de esa forma acumulativa (esa que va creciendo y en la última celda tiene toda la información junta). El HTML se genera con las repeticiones correctas, pero tiene ese defecto en el contenido. Las variables quedaron definidas así:

Código PHP:
Ver original
  1. $linea .= $salida[0][1];
  2. $tipo .= $salida[0][2];
  3. $titulo .= $salida[0][2] == 'msgid' ? $salida[0][3] : null;
  4. $titulo_p .= $salida[0][2] == 'msgid_plural' ? $salida[0][3] : null;
  5. $txt_s .= $salida[0][2] == 'msgstr[0]' ? $salida[0][3] : null;
  6. $txt .= $salida[0][2] == 'msgstr' ? $salida[0][3] : $txt_s;
  7. $txt_p .= $salida[0][2] == 'msgstr[1]' ? $salida[0][3] : null;
Y si las saco del for para colocarlas en el foreach (donde está el HTML que debe repetirse) entonces no funcionan. Ese es el problema.

Quisiera saber qué estoy haciendo mal. Los datos separados son necesarios para procesarlos debidamente pero -como obra de Satanás- viene a aparecer ese error cuando todo está casi hecho. Desde luego ya le he dado un montón de vueltas.