Array zu String PHP?

282

Was ist die beste Methode zum Konvertieren eines PHP-Arrays in einen String?
Ich habe die Variable, $typedie ein Array von Typen ist.

$type = $_POST[type];

Ich möchte es als einzelne Zeichenfolge in meiner Datenbank speichern, wobei jeder Eintrag durch Folgendes getrennt ist |:

Sport | Festivals | Andere

Philip Kirkbride
quelle
24
Bitte fügen Sie keine serialisierten Werte in eine Datenbank ein. Hier ist der Grund: stackoverflow.com/questions/7364803/…
NullUserException
14
@NullUserException ఠ_ఠ Ich stimme zu, dass das Einfügen von serialisierten Werten in die Datenbank nur absolut Augen verbrennt, aber Sie kennen seine Situation nicht - es ist sehr gut, vielleicht gerechtfertigt.
AngryHacker
4
Ich denke, dass diese Frage wieder geöffnet werden sollte. Es ist eine nützliche Frage für Anfänger und ich denke nicht, dass sie nicht zum Thema gehört.
SaidbakR
1
Was ist, wenn einige der Werte im Array Zeichen enthalten?
Summe
Sie können diesen Zeichen dann entkommen. Lesen Sie es hier. php.net/manual/en/regexp.reference.escape.php
FortuneSoldier

Antworten:

352

Verwenden Sie einfach implode

implode("|",$type);
Niet the Dark Absol
quelle
13
Dies ist gut, es sei denn, Sie haben verschachtelte Arrays. Dies kann passieren, $_POSTwenn Sie Formulareingaben mit Array-Namen verwenden.
Leith
Verwenden Sie bei verschachtelten Arrays nur ein foreach, es funktioniert.
Deepcell
224

Sie können json_encode () verwenden

<?php
$arr = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5);

echo json_encode($arr);
?>

Verwenden Sie später einfach json_decode () , um die Zeichenfolge aus Ihrer Datenbank zu dekodieren. Alles andere ist nutzlos. JSON behält die Array-Beziehung für die spätere Verwendung bei!

Jakub
quelle
40
" Alles andere ist nutzlos " ... außer vielleicht die Daten zu normalisieren.
Dan Lugg
5
Rofl @ Kommentar über mir. Wie Sie sagen, sind pauschale Aussagen fast immer nicht hilfreich.
Aaron Cole
12
Ich bin froh, dass ihr unterhalten werdet :)
Jakub
16
"Umfassende Verallgemeinerungen sowie absolute Verallgemeinerungen sind immer falsch. Immer." ;)
Olie
Ich mag es, dass dieser die Schlüssel behält. Dies ist sehr nützlich für die spätere Verwendung.
Apolymoxic
45
json_encode($data) //converts an array to JSON string
json_decode($jsonString) //converts json string to php array

WARUM JSON: Sie können es mit den meisten Programmiersprachen verwenden. Die mit der Funktion serialize () von PHP erstellte Zeichenfolge ist nur in PHP lesbar, und Sie möchten solche Dinge nicht in Ihren Datenbanken speichern, insbesondere wenn die Datenbank von Anwendungen gemeinsam genutzt wird, in die geschrieben wurde verschiedene Programmiersprachen

sumit
quelle
1
JFI in meiner Verwendung musste ich $ data = json_decode ($ jsonString, true)
Terminality
Das zweite Argument ist optional, in den meisten Fällen funktioniert es ohne das.
Summe
Dies funktioniert hervorragend für ein- oder mehrdimensionale Arrays und meiner Meinung nach sollte dies die akzeptierte Antwort sein. Erwägen Sie auch, true als zweiten Parameter hinzuzufügen.
Kombinieren Sie den
36

Nein, Sie möchten es nicht so als einzelne Zeichenfolge in Ihrer Datenbank speichern.

Sie könnten verwenden, serialize()aber dies erschwert die Suche, die Arbeit mit Ihren Daten und verschwendet Speicherplatz.

Sie können auch eine andere Codierung durchführen, diese ist jedoch im Allgemeinen für dasselbe Problem anfällig.

Der ganze Grund, warum Sie eine Datenbank haben, ist, dass Sie diese Arbeit trivial ausführen können. Sie benötigen keine Tabelle zum Speichern von Arrays, sondern eine Tabelle, die Sie als Array darstellen können.

Beispiel:

id | word
1  | Sports
2  | Festivals
3  | Classes
4  | Other

Sie würden einfach die Daten aus der Tabelle mit SQL auswählen, anstatt eine Tabelle zu haben, die wie folgt aussieht:

id | word
1  | Sports|Festivals|Classes|Other

Auf diese Weise entwirft niemand ein Schema in einer relationalen Datenbank, es macht den Zweck des Schemas völlig zunichte.

Inkognito
quelle
2
Sicher ist es, Sie müssen den Begrenzern nicht entkommen!
Chris G.
2
@MarcB Damit ist die Codierung idiotensicher, standardmäßig, weniger fehleranfällig und kann problemlos wieder in ein Array exportiert werden. Sollte er einen anderen Tisch benutzen? Wahrscheinlich. Ist das besser als alle sagen implodieren? Absolut.
Inkognito
6
Die richtige Antwort auf diese Frage wäre: Fügen Sie keine serialisierten Werte in ein RDBMS ein. So etwas sollte Raptoren beschwören .
NullUserException
1
@timdev: json-Escape kann in einigen Situationen dem SQL-Escape entsprechen, aber abhängig davon werden Sie am Ende nur verbrannt. JSON verwendet Backslashes - was ist, wenn Sie sich in einer Datenbank befinden, die Backslashes nicht erkennt und doppelte Anführungszeichen für die Escape-Funktion verwendet? zB ''statt \'?
Marc B
1
Obwohl ich dem hier zum Ausdruck gebrachten Prinzip zustimme (normale Formen sind gut, die Verwendung von DB zur Strukturierung ist gut, duh), löst jede Antwort , die mit "Nein, du willst nicht ..." beginnt, Glocken in meinem Kopf aus. Sie haben nicht den vollständigen Kontext der Frage des Fragestellers und glauben es oder nicht, sie haben möglicherweise einen hervorragenden Grund, diese bestimmten Daten zu denormalisieren und in einem einzigen Feld zu speichern. Nein, du bist nicht allwissend; Sie wissen NICHT, was der Fragesteller will. Schreiben Sie Ihre Meinung in einen Kommentar , bitte nicht in eine Antwort .
System PAUSE
35

Einer der besten Wege:

echo print_r($array, true);
vvkatwss vvkatwss
quelle
10
Bitte erläutern Sie Ihre Antwort und zeigen Sie, wie sie das Problem löst
Unser Mann in Bananen
1
Sie können auch Folgendes verwenden: "print_r ($ array, false);", da hierdurch das Array gedruckt wird, ohne dass ein Wert zurückgegeben wird. Wenn true angegeben ist, wird print_r () nicht alleine gedruckt und gibt einfach die Zeichenfolge zurück. Mehr unter: php.net/manual/en/function.print-r.php
Garrett
Dieser sollte der beste sein, da json_decodeer das Format durcheinander bringt und Verwirrung stiftet.
Aminah Nuraini
14

implode () :

<?php
$string = implode('|',$types);

Incognito hat jedoch Recht, Sie möchten es wahrscheinlich nicht so speichern - es ist eine völlige Verschwendung der relationalen Leistung Ihrer Datenbank.

Wenn Sie beim Serialisieren nicht mehr weiterkommen, können Sie auch die Verwendung in Betracht ziehen weiterkommen json_encode () verwenden.

timdev
quelle
implode ist auf flache Arrays beschränkt
ahnbizcad
11

Dieser speichert KEYS & VALUES

function array2string($data){
    $log_a = "";
    foreach ($data as $key => $value) {
        if(is_array($value))    $log_a .= "[".$key."] => (". array2string($value). ") \n";
        else                    $log_a .= "[".$key."] => ".$value."\n";
    }
    return $log_a;
}

Hoffe es hilft jemandem.

Ante Braovic
quelle
6
$data = array("asdcasdc","35353","asdca353sdc","sadcasdc","sadcasdc","asdcsdcsad");

$string_array = json_encode($data);

Jetzt können Sie diesen $ string_array-Wert in die Datenbank einfügen

Akbar Mirsiddikov
quelle
5

Für assoziative Speicherarrays können Sie Folgendes verwenden serialize:

$arr = array(
    'a' => 1,
    'b' => 2,
    'c' => 3
);

file_put_contents('stored-array.txt', serialize($arr));

Und laden mit unserialize:

$arr = unserialize(file_get_contents('stored-array.txt'));

print_r($arr);

Wenn Sie jedoch Dinamic- .phpDateien mit Array erstellen müssen (z. B. Konfigurationsdateien), können Sie Folgendes verwenden var_export(..., true);:

In Datei speichern:

$arr = array(
    'a' => 1,
    'b' => 2,
    'c' => 3
);

$str = preg_replace('#,(\s+|)\)#', '$1)', var_export($arr, true));
$str = '<?php' . PHP_EOL . 'return ' . $str . ';';

file_put_contents('config.php', $str);

Array-Werte abrufen:

$arr = include 'config.php';

print_r($arr);
Guilherme Nascimento
quelle
3

Sie können die PHP-String-Funktion verwenden implode()

Mögen,

<?php
  $sports=$_POST['sports'];;
  $festival=$_POST['festival'];
  $food=$_POST['food'];
  $array=[$sports,$festival,$food];
  $string=implode('|',$array);
  echo $string;
?>

Wenn zum Beispiel $sports='football'; $festival='janmastami'; $food='biriyani';

Dann wäre die Ausgabe:

football|janmastami|biriyani

Weitere Informationen zur Funktion PHP implode () finden Sie unter w3schools


quelle
0

es gibt viele Wege ,

Zwei beste Möglichkeiten dafür sind

$arr = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5);
echo json_encode($arr);
//ouputs as
{"a":1,"b":2,"c":3,"d":4,"e":5}


$b = array ('m' => 'monkey', 'foo' => 'bar', 'x' => array ('x', 'y', 'z'));
$results = print_r($b, true); // $results now contains output from print_r
Daud Malik
quelle
Sie wiederholen bereits gegebene Antworten. Dies fügt keinen neuen Wert oder neue Methoden hinzu.
Tschallacka
@ Tschallacka ja, aber sehr wenige Antworten auf diesen Beitrag liefern Ausgabe ....
Daud Malik