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.

CobaltoBebéOso
fuente

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'));
Yoshi
fuente
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)
Msencenb
fuente
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));
Farhan
fuente
8
join(',', array_map(function (array $tag) { return $tag['tag_name']; }, $array))
deceze
fuente
5

muy simple, ve por esto

$str;
foreach ($arrays as $arr) {
$str .= $arr["tag_name"] . ",";
}
$str = trim($str, ',');//removes the final comma 
Vigneswaran S
fuente
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)));
Tarik
fuente
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á.

Atanas Atanasov
fuente