Ich bin neu in PHP und habe nicht ganz den Überblick darüber, wie es funktioniert. Wenn ich ein zweidimensionales Array als solches habe (von einer Datenbank zurückgegeben):
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"
}
}
und wollen es in die Zeichenfolge verwandeln 5,3,4
wie würde man das am schnellsten machen? Ich habe derzeit eine unangenehme foreach
Schleife, hatte aber gehofft, dass es in einer Zeile gemacht werden könnte. Ein Standard implode
gibt mir Array,Array,Array
.

Paul
Dies ändert Ihr Array mit array_mapaber wahrscheinlich zum Besseren, indem Sie es in ein 1D-Array von verwandeln tag_id
‘s. Dann können Sie einfach implode wie gewohnt verwenden:
$arr = array_map(function($el){ return $el['tag_id']; }, $arr);
$str = implode(',', $arr);
Wenn Sie Ihr Array nicht ändern möchten, können Sie dies einfach tun:
$str = implode(',', array_map(function($el){ return $el['tag_id']; }, $arr));
Codepad-Demo

Bruce Lim
Sie haben nach einem zweidimensionalen Array gefragt, hier ist eine Funktion, die für mehrdimensionale Arrays funktioniert.
function implode_r($g, $p) {
return is_array($p) ?
implode($g, array_map(__FUNCTION__, array_fill(0, count($p), $g), $p)) :
$p;
}
Ich kann eine Array-Struktur wie folgt abflachen:
$multidimensional_array = array(
'This',
array(
'is',
array(
'a',
'test'
),
array(
'for',
'multidimensional',
array(
'array'
)
)
)
);
echo implode_r(',', $multidimensional_array);
Das Ergebnis ist:
This,is,a,test,for,multidimensional,array
// simplest
$str = implode(',',array_map('implode',$arr));
Wenn man wie in diesem Fall einfach eine einzelne Array-“Spalte” implodieren möchte, ist das Einfachste:
implode(",", array_column($array,"tag_id"));

Loc Nguyen
Einzeiliger Befehl
implode(',', array_map('implode', $arr, array_fill(0, count($arr), '')))

Hannebaumweg
Schauen Sie sich das unten an PHP implode() Handbuch:
<?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 );
}
?>
Wenn Sie nur den Wert (und nicht den Schlüssel) zurückgeben möchten, ändern Sie einfach das obige, um es zu verwenden $string[] = "{$val}";
.

RafaSashi
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;
}
10117800cookie-checkDer einfachste Weg, ein zweidimensionales Array zu implodieren ()?yes
Sie können alle Zeilenumbrüche in Ihrer entfernen
foreach
.– Alex Turpin
14. Juni 2012 um 17:28 Uhr
Was ich versuche zu sagen, ist, dass es Ihnen egal sein sollte, wenn etwas ein paar Zeilen verwendet.
– Alex Turpin
14. Juni 2012 um 17:28 Uhr
@ Xeon06 Obwohl ich grundsätzlich zustimme, würde ich gerne sehen, ob es einen raffinierten Weg gibt, es besser zu machen. Die Hälfte dieses Projekts besteht aus Lernen, die andere Hälfte aus tatsächlichem Programmieren. (Noch besser, ich könnte alle Zeilenumbrüche entfernen und meinem Chef sagen, dass der Code nur einen Einzeiler braucht)
– Einige Kätzchen
14. Juni 2012 um 17:33 Uhr
mögliches Duplikat von PHP: Implodieren Sie Daten aus einem mehrdimensionalen Array
– Benutzer1645055
23. November 2013 um 5:26 Uhr