Devuelve una sola columna de una matriz multidimensional


79

Soy un novato en PHP y necesito una solución rápida para el siguiente problema, pero parece que no puedo encontrar una:

Tengo una matriz multidimensional como esa

Array
(
    [0] => Array
        (
            [blogTags_id] => 1
            [tag_name] => google
            [inserted_on] => 2013-05-22 09:51:34
            [inserted_by] => 2
        )

    [1] => Array
        (
            [blogTags_id] => 2
            [tag_name] => technology
            [inserted_on] => 2013-05-22 09:51:34
            [inserted_by] => 2
        )
)

Quiero usar el implode()para devolver de alguna manera una cadena separada por comas que contiene valores de tag_nameclave como ese.

google, technology

¿Es posible lograr este efecto con dicha función? Si no es así, sugiera una solución alternativa.

Respuestas:


183

Bastante sencillo:

$input = array(
  array(
    'tag_name' => 'google'
  ),
  array(
    'tag_name' => 'technology'
  )
);

echo implode(', ', array_map(function ($entry) {
  return $entry['tag_name'];
}, $input));

http://3v4l.org/ltBZ0


y lo nuevo en php v5.5.0, array_column:

echo implode(', ', array_column($input, 'tag_name'));

4
Tenga en cuenta que los cierres solo son compatibles con PHP 5.3 o superior.
Léo Lam

2
¡La solución para> = 5.5.0 es perfecta!
Key-Six

Irse con> 5.5 ... :)
Vishal Kumar Sahu

13

Aunque esta pregunta está relacionada con la conversión de cadenas, me encontré con esto mientras quería una forma fácil de escribir matrices en mis archivos de registro. Si solo desea la información y no le importa la limpieza exacta de una cadena, puede considerar:

json_encode($array)

Sé que parece un truco, pero funciona de maravilla (PHP 5.4 aquí). ;)
Paulo Bueno

1
@PauloBueno en 2020 que realmente, realmente no se debe utilizar PPH 5.4 !!
Martin

9

array_mapes una función de devolución de llamada, donde puedes jugar con la matriz pasada. Esto debería funcionar.

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

8
join(',', array_map(function (array $tag) { return $tag['tag_name']; }, $array))

5

muy simple, ve por esto

$str;
foreach ($arrays as $arr) {
$str .= $arr["tag_name"] . ",";
}
$str = trim($str, ',');//removes the final comma 

3

Si desea "tag_name" con "blogTags_id" asociado, utilice: (PHP> 5.5)

$blogDatas = array_column($your_multi_dim_array, 'tag_name', 'blogTags_id');
echo implode(', ', array_map(function ($k, $v) { return "$k: $v"; }, array_keys($blogDatas), array_values($blogDatas)));

1

En esta situación, implosionar ($ array, ','); funcionará, porque solo desea los valores. En PHP 5.6 trabajando para mí.

Si desea implosionar las claves y los valores en uno como:
blogTags_id: 1
tag_name: google

$toImplode=array();
foreach($array as $key => $value) {
$toImplode[]= "$key: $value".'<br>';
}
$imploded=implode('',$toImplode);

Lo siento, entiendo mal, debido al título "Implantar datos de una matriz multidimensional". Bueno, mi respuesta todavía la responde de alguna manera, puede ayudar a alguien, por lo que no la eliminará.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.