Zwraca pojedynczą kolumnę z wielowymiarowej tablicy

79

Jestem nowicjuszem w PHP i potrzebuję szybkiego rozwiązania następującego problemu, ale nie mogę go wymyślić:

Mam taką wielowymiarową tablicę

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
        )
)

Chcę użyć, implode()aby w jakiś sposób zwrócić ciąg oddzielony przecinkami zawierający wartości tag_nameklucza.

google, technology

Czy za pomocą tej funkcji można osiągnąć taki efekt? Jeśli nie, to zaproponuj alternatywne rozwiązanie.

CobaltBabyBear
źródło

Odpowiedzi:

183

Całkiem proste:

$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


i nowość w php 5.5.0 array_column:

echo implode(', ', array_column($input, 'tag_name'));
Yoshi
źródło
4
Zauważ, że domknięcia są obsługiwane tylko w PHP 5.3 lub nowszym.
Léo Lam
2
Rozwiązanie dla> = 5.5.0 jest idealne!
Key-Six,
Wychodzę z> 5,5 ... :)
Vishal Kumar Sahu
13

Chociaż to pytanie jest związane z konwersją ciągów, natknąłem się na to, szukając prostego sposobu na zapisywanie tablic w moich plikach dziennika. Jeśli potrzebujesz tylko informacji i nie dbasz o dokładną czystość ciągu, możesz rozważyć:

json_encode($array)
Msencenb
źródło
Wiem, że wygląda to na włamanie, ale działa jak urok (tutaj PHP 5.4). ;)
Paulo Bueno
1
@PauloBueno w 2020 roku naprawdę, naprawdę nie powinieneś używać PPH 5.4 !!
Martin
9

array_mapjest funkcją zwrotną, w której można bawić się przekazaną tablicą. to powinno działać.

$str = implode(',', array_map(function($el){ return $el['tag_id']; }, $arr));
Farhan
źródło
8
join(',', array_map(function (array $tag) { return $tag['tag_name']; }, $array))
zamrozić
źródło
5

bardzo proste, przejdź do tego

$str;
foreach ($arrays as $arr) {
$str .= $arr["tag_name"] . ",";
}
$str = trim($str, ',');//removes the final comma 
Vigneswaran S
źródło
3

Jeśli chcesz, aby nazwa „tag_name” była powiązana z „blogTags_id”, użyj: (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
źródło
1

W tej sytuacji imploduje ($ tablica, ','); zadziała, ponieważ chcesz tylko wartości. W PHP 5.6 pracuje dla mnie.

Jeśli chcesz implodować klucze i wartości w jednym, takim jak:
blogTags_id: 1
tag_name: google

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

Przepraszam, źle rozumiem, ponieważ tytuł „Implode dane z wielowymiarowej tablicy”. Cóż, moja odpowiedź nadal jakoś na to odpowiem, może komuś pomóc, więc nie usunie.

Atanas Atanasov
źródło