Implodieren Sie Daten aus einem mehrdimensionalen Array

79

Ich bin ein Anfänger in PHP und brauche eine schnelle Lösung für das folgende Problem, kann mir aber anscheinend keine einfallen lassen:

Ich habe so ein mehrdimensionales Array

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

Ich möchte das verwenden, implode()um irgendwie eine durch Kommas getrennte Zeichenfolge zurückzugeben, die solche tag_nameSchlüsselwerte enthält.

google, technology

Ist es möglich, diesen Effekt mit dieser Funktion zu erzielen? Wenn nicht, schlagen Sie bitte eine alternative Lösung vor.

CobaltBabyBear
quelle

Antworten:

181

Ziemlich einfach:

$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


und neu in php v5.5.0 , array_column:

echo implode(', ', array_column($input, 'tag_name'));
Yoshi
quelle
4
Beachten Sie, dass Schließungen nur mit PHP 5.3 oder höher unterstützt werden.
Léo Lam
2
Die Lösung für> = 5.5.0 ist perfekt!
Key-Six
Weggehen mit> 5.5 ... :)
Sahu V Kumar
12

Obwohl diese Frage mit der Konvertierung von Zeichenfolgen zusammenhängt, bin ich darauf gestoßen, als ich eine einfache Möglichkeit zum Schreiben von Arrays in meine Protokolldateien suchte. Wenn Sie nur die Informationen wünschen und sich nicht um die genaue Sauberkeit eines Strings kümmern möchten, sollten Sie Folgendes berücksichtigen:

json_encode($array)
Msencenb
quelle
Ich weiß, es scheint wie ein Hack, funktioniert aber wie ein Zauber (PHP 5.4 hier). ;)
Paulo Bueno
1
@PauloBueno im Jahr 2020 sollten Sie wirklich, wirklich nicht PPH 5.4 verwenden !!
Martin
9

array_mapist eine Rückruffunktion, mit der Sie mit dem übergebenen Array spielen können. das sollte funktionieren.

$str = implode(',', array_map(function($el){ return $el['tag_id']; }, $arr));
Farhan
quelle
8
join(',', array_map(function (array $tag) { return $tag['tag_name']; }, $array))
täuschen
quelle
5

sehr einfach dafür gehen

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

Wenn Sie "tag_name" mit der zugehörigen "blogTags_id" möchten, verwenden Sie: (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
quelle
1

In dieser Situation implodieren ($ array, ','); wird funktionieren, weil Sie nur die Werte wollen. In PHP 5.6 für mich arbeiten.

Wenn Sie die Schlüssel und Werte in einem wie implodieren möchten:
blogTags_id: 1
tag_name: google

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

Entschuldigung, ich verstehe falsch, weil der Titel "Daten aus einem mehrdimensionalen Array implodieren". Nun, meine Antwort beantwortet es immer noch irgendwie, kann jemandem helfen, wird es also nicht löschen.

Atanas Atanasov
quelle