2010-10-10 27 views
20

¿Hay alguna función para explotar e implosionar repetidamente arrays multidimensionales en PHP?Implantar y explotar matrices multidimensionales

+1

Creo que ustedes saltaron el arma. La pregunta que marcó como respuesta no es exactamente la respuesta a esta pregunta. Debes leer antes de presionar ese botón de engaño. No es tan dificil. – Jeffz

+1

Esta pregunta está marcada incorrectamente como un duplicado de [implode-data-from-a-multi-dimensional-array] (http://stackoverflow.com/questions/16710800/implode-data-from-a-multi-dimensional- formación). Esta pregunta se trata de implosionar/explotar en general, mientras que la otra se trata de implosionar una sola clave en una matriz multidimensional. –

+0

json_encode/json_decode también son buenas formas de empaquetar, descomprimir y almacenar matrices multidimensionales. json_encode puede codificar matrices como '['foo' => ['bar' => 1, 'baz' => [2,3]]]' y devolverá una cadena como '{" foo ": {" bar ": 1, "baz": [2,3]}} '. json_decode puede devolver la cadena codificada JSON como un objeto. Los datos JSON son útiles al pasar datos de PHP a Javascript como JSON ('stdClass Object ([foo] => stdClass Object ...}') –

Respuesta

43

Puede hacer esto escribiendo una función recursiva:

function multi_implode($array, $glue) { 
    $ret = ''; 

    foreach ($array as $item) { 
     if (is_array($item)) { 
      $ret .= multi_implode($item, $glue) . $glue; 
     } else { 
      $ret .= $item . $glue; 
     } 
    } 

    $ret = substr($ret, 0, 0-strlen($glue)); 

    return $ret; 
} 

En cuanto a la explosión, esto es imposible a menos que dar algún tipo de estructura formal de la cadena, en cuyo caso usted está en el reino de la serialización , para las cuales ya existen funciones: serialize, json_encode, http_build_query entre otros.

+4

¡Ah! ¡Serialize es lo que no sabía que necesitaba! – HyderA

+0

¿Alguna forma de implosionar solo ciertas columnas dentro de las matrices de matrices? así, pero imprime solo los campos db? –

2

Puede usar array_walk_recursive para llamar a una función dada en cada valor de la matriz recursivamente. El aspecto de esa función depende de los datos reales y de lo que intenta hacer.

2

Hice dos funciones recursivas para implosionar y explotar. El resultado de multi_explode puede no funcionar como se esperaba (todos los valores están almacenados en el mismo nivel de dimensión).

function multi_implode(array $glues, array $array){ 
    $out = ""; 
    $g = array_shift($glues); 
    $c = count($array); 
    $i = 0; 
    foreach ($array as $val){ 
     if (is_array($val)){ 
      $out .= multi_implode($glues,$val); 
     } else { 
      $out .= (string)$val; 
     } 
     $i++; 
     if ($i<$c){ 
      $out .= $g; 
     } 
    } 
    return $out; 
} 
function multi_explode(array $delimiter,$string){ 
    $d = array_shift($delimiter); 
    if ($d!=NULL){ 
     $tmp = explode($d,$string); 
     foreach ($tmp as $key => $o){ 
      $out[$key] = multi_explode($delimiter,$o); 
     } 
    } else { 
     return $string; 
    } 
    return $out; 
} 

Para utilizarlos:

echo $s = multi_implode(
    array(';',',','-'), 
    array(
     'a', 
     array(10), 
     array(10,20), 
     array(
      10, 
      array('s','t'), 
      array('z','g') 
     ) 
    ) 
); 
$a= multi_explode(array(';',',','-'),$s); 
var_export($a); 
Cuestiones relacionadas