Der einfachste Weg, ein zweidimensionales Array zu implodieren ()?

Lesezeit: 3 Minuten

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.

  • 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

Benutzer-Avatar
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

  • Nun, Sie können das Ergebnis tatsächlich weitergeben array_map direkt ins implode Forderung. )

    – raina77ow

    14. Juni 2012 um 17:33 Uhr

  • @ raina77ow Ja, aber ich denke, es könnte besser sein, das ursprüngliche Array zu ändern, da die zusätzliche Dimension nutzlos erscheint. Ich werde meine Antwort aber aktualisieren 🙂

    – Paulus

    14. Juni 2012 um 17:34 Uhr

Benutzer-Avatar
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")); 

Benutzer-Avatar
Loc Nguyen

Einzeiliger Befehl

implode(',', array_map('implode', $arr, array_fill(0, count($arr), '')))

Benutzer-Avatar
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}";.

Benutzer-Avatar
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;
}

1011780cookie-checkDer einfachste Weg, ein zweidimensionales Array zu implodieren ()?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy