construir una matriz multidimensional desde la cadena php

EDITAR: Aquí hay una porción de $preparedstring :

555555, Jones, Brian, NYC, 1000,2011-10-21 00: 00: 00, Cheque, 1542,0,, Cheque,, 0,, ​​Cheque,,; 6666666, Miler, Christopher, Chicago, 1000,2011-10-26 00: 00: 00, Cheque, 6406,0,, Cheque,, 0,, ​​Cheque,,;

Estoy tratando de convertir una tabla HTML en una matriz multidimensional. He convertido la tabla en una cadena larga, cada celda se delimita con una coma y cada fila se delimita con un punto y coma.

No estoy exactamente seguro de cómo construir la matriz multidimensional a partir de esta cadena. Esto es lo que he intentado hasta ahora:

 array ( $innerarr[]; ) } ); ?> 

esto me da un error de syntax cerca del

$ arr = array

(

paréntesis de apertura.

Solutions Collecting From Web of "construir una matriz multidimensional desde la cadena php"

Su enfoque para resolver el problema es lamentablemente muy incorrecto, aunque hay muchas soluciones para su problema, yo usaría algo como el siguiente.


¿Cómo funciona el código?

Primero usamos explosionar para dividir nuestra cadena en trozos más pequeños ; es nuestro delimitador

Pasamos esta matriz recién creada a array_map ya que es el segundo parámetro.

array_map toma dos parámetros, el primero es una función que se llamará para cada miembro del segundo parámetro (que debería ser una matriz).

Dentro de nuestra callback a array_map usamos explode para dividir una vez más los valores, ahora con , como nuestro delimitador.


 $data = "1,2,3;4,5,6;7,8,9"; $ret = array_map ( function ($_) {return explode (',', $_);}, explode (';', $data) ); print_r ($ret); 

salida

 Array ( [0] => Array ( [0] => 1 [1] => 2 [2] => 3 ) [1] => Array ( [0] => 4 [1] => 5 [2] => 6 ) [2] => Array ( [0] => 7 [1] => 8 [2] => 9 ) ) 

No funciona, ¿por qué?

Probablemente porque estás usando una versión de PHP anterior a la 5.3, si es así puedes usar este fragmento en su lugar:

 function explode_by_comma ($_) { return explode (',', $_); } $ret = array_map ('explode_by_comma', explode (';', $data)); 
 < ?php //explode first dimension of the array to create an array of rows $outerARR = explode(";", $preparedstring); $arr = array(); //iterate through the newly created array foreach ($outerARR as $arrvalue) { //explode this row into columns $innerarr = explode(",", $arrvalue); //add the newly created array of columns to the output array as a new index $arr[] = $innerarr; } ?> 

Estás cerca, pero las matrices no funcionan de esa manera. No puedes poner un foreach dentro de un constructor de arreglos como ese. Debe tener un aspecto como este:

 $outerARR = explode(";", $preparedstring); $arr = array(); foreach ($outerARR as $arrvalue){ $innerarr = explode(",", $arrvalue); $arr[] = $innerarr; } 

Demostración: http://codepad.org/I5wFFczR

 $outerARR = explode(";", $preparedstring); $a = array(); $y=0; foreach ($outerARR as $arrvalue){ $x=0; $innerarr = explode(",", $arrvalue); foreach($innerarr as $v){ $a[$y][$x++] = $v; } $y++; } print_r($a); Array ( [0] => Array ( [0] => 555555 [1] => Jones [2] => Brian [3] => NYC [4] => 1000 [5] => 2011-10-21 00:00:00 [6] => Check [7] => 1542 [8] => 0 [9] => [10] => Check [11] => [12] => 0 [13] => [14] => Check [15] => [16] => ) [1] => Array ( [0] => 6666666 [1] => Miler [2] => Christopher [3] => Chicago [4] => 1000 [5] => 2011-10-26 00:00:00 [6] => Check [7] => 6406 [8] => 0 [9] => [10] => Check [11] => [12] => 0 [13] => [14] => Check [15] => [16] => ) )