2012-06-14 14 views
17

Soy nuevo en PHP y no conozco bien cómo funciona. Si tengo una matriz bidimensional como tal (devuelto por una base de datos):¿La forma más fácil de implosionar() una matriz bidimensional?

array(3) { 
    [0]=> array(1) {   
     ["tag_id"]=> string(1) "5" 
    } 
    [1]=> array(1) {   
     ["tag_id"]=> string(1) "3" 
    } 
    [2]=> array(1) {   
     ["tag_id"]=> string(1) "4" 
    } 
} 

y quiero convertirlo en la cadena 5,3,4 cuál sería la forma más rápida de no hacer esto? Actualmente tengo un loop odioso foreach, pero esperaba que se pudiera hacer en una línea. Un estándar implode me da Array,Array,Array.

+3

se pueden eliminar todos los saltos de línea en su 'foreach'. –

+0

Lo que estoy tratando de decir es que no debería importar si algo usa un par de líneas. –

+1

@ Xeon06 Aunque estoy de acuerdo en principio, me gustaría ver si hay una forma ingeniosa de hacerlo mejor. La mitad de este proyecto es aprendizaje, la otra mitad es codificación real. (Aún mejor, podría eliminar todos los saltos de línea y decirle a mi jefe que el código solo necesitaba un trazador de líneas) – SomeKittens

Respuesta

23

Esto modifica su matriz usando array_map, pero probablemente para mejor convirtiéndola en una matriz 1D de tag_id. A continuación, sólo puede utilizar implosionar como normal:

$arr = array_map(function($el){ return $el['tag_id']; }, $arr); 
$str = implode(',', $arr); 

Si no desea modificar la matriz de lo que simplemente puede hacer esto:

$str = implode(',', array_map(function($el){ return $el['tag_id']; }, $arr)); 

Codepad Demo

+1

Bueno, en realidad puedes pasar el resultado de 'array_map' a la llamada' implode'.) – raina77ow

+0

@ raina77ow Sí, pero creo que sería mejor modificar la matriz original ya que la dimensión extra parece inútil. Voy a actualizar mi respuesta sin embargo :) – Paulpro

1

Mira la continuación de la PHP implode() manual:

<?php 
/** 
* Implode an array with the key and value pair giving 
* a glue, a separator between pairs and the array 
* to implode. 
* @param string $glue The glue between key and value 
* @param string $separator Separator between pairs 
* @param array $array The array to implode 
* @return string The imploded array 
*/ 
function array_implode($glue, $separator, $array) { 
    if (! is_array($array)) return $array; 
    $string = array(); 
    foreach ($array as $key => $val) { 
     if (is_array($val)) 
      $val = implode(',', $val); 
     $string[] = "{$key}{$glue}{$val}"; 

    } 
    return implode($separator, $string); 

} 
?> 

Si sólo desea devolver el valor (y no la clave), justo por encima de modificar el uso $string[] = "{$val}";.

6

Usted pidió dos -dimensional array, aquí hay una función que funcionará para la matriz multidimensional.

function implode_r($g, $p) { 
    return is_array($p) ? 
      implode($g, array_map(__FUNCTION__, array_fill(0, count($p), $g), $p)) : 
      $p; 
} 

I puede acoplar una estructura de matriz de este modo:

$multidimensional_array = array(
    'This', 
    array(
     'is', 
     array(
      'a', 
      'test' 
     ), 
     array(
      'for', 
      'multidimensional', 
      array(
       'array' 
      ) 
     ) 
    ) 
); 

echo implode_r(',', $multidimensional_array); 

Los resultados es:

This,is,a,test,for,multidimensional,array 
0
function recursive_implode($connector=',', $array=[], $implod='keys'){ 

    if($implod=='keys'){ 

     $results=implode($connector,array_keys($array)); 
    } 
    else{ 

     $results=implode($connector,$array); 
    } 

    foreach($array as $key=> $value){ 

     if(is_array($value)){ 

      $results.=$connector.recursive_implode($connector,$value,$implod); 
     } 
    } 

    return $results; 
} 
2

Una línea de comandos

implode(',', array_map('implode', $arr, array_fill(0, count($arr), ''))) 
4
// simplest 
$str = implode(',',array_map('implode',$arr)); 
2

Si uno simplemente quiere implosionar una sola matriz "columna", como en este caso, entonces la cosa más sencilla de hacerlo es:

implode(",", array_column($array,"tag_id")); 
Cuestiones relacionadas