Matrice a stringa PHP?


283

Qual è il metodo migliore per convertire un array PHP in una stringa?
Ho la variabile $typeche è una matrice di tipi.

$type = $_POST[type];

Voglio memorizzarlo come una singola stringa nel mio database con ogni voce separata da |:

Sport | Festivals | Altro


24
Evitare di inserire valori serializzati in un database. Ecco perché: stackoverflow.com/questions/7364803/...
NullUserException

14
@NullUserException ఠ_ఠ Sono d'accordo sul fatto che l'inserimento di valori serializzati nel DB bruci assolutamente gli occhi, ma non conosci la sua situazione - forse è giustificata.
AngryHacker,

4
Penso che questa domanda dovrebbe essere riaperta. È una domanda utile per i principianti e non penso che sia fuori tema.
SaidbakR,

1
cosa succede se alcuni dei valori nella matrice hanno caratteri |
Accusa

Puoi quindi sfuggire a quei personaggi. Leggilo qui. php.net/manual/en/regexp.reference.escape.php
FortuneSoldier

Risposte:


352

Usa implode

implode("|",$type);

13
Ciò è utile a meno che non si disponga di array nidificati, il che può accadere $_POSTse si utilizzano input di moduli con nome array.
Leith,

con array nidificati basta usare un foreach che funzionerà.
deepcell,

224

Puoi usare json_encode ()

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

echo json_encode($arr);
?>

Successivamente basta usare json_decode () per decodificare la stringa dal proprio DB. Qualsiasi altra cosa è inutile, JSON mantiene intatta la relazione dell'array per un uso successivo!


40
" Qualsiasi altra cosa è inutile " ... tranne forse per normalizzare i dati.
Dan Lugg,

5
Rofl @ commenta sopra di me. Come dici tu, le affermazioni generali sono quasi sempre inutili.
Aaron Cole,

12
Sono contento che vi siate divertiti :)
Jakub,

16
"Le generalizzazioni generali, così come gli assoluti, sono sempre sbagliate. Sempre." ;)
Olie,

Mi piace che questo mantenga le chiavi. Questo è molto utile per un uso successivo.
Apolymoxic

45
json_encode($data) //converts an array to JSON string
json_decode($jsonString) //converts json string to php array

PERCHÉ JSON: Puoi usarlo con la maggior parte dei linguaggi di programmazione, la stringa creata dalla funzione serialize () di php è leggibile solo in PHP e non ti piacerebbe archiviare tali cose nei tuoi database specialmente se il database è condiviso tra le applicazioni scritte in diversi linguaggi di programmazione


1
JFI nel mio uso ho dovuto chiamare $ data = json_decode ($ jsonString, true)
Terminalità

il secondo argomento è facoltativo, nella maggior parte dei casi funziona senza quello.
sumit

Questo funziona in modo ottimale per array monodimensionali o multidimensionali e secondo me dovrebbe essere la risposta accettata. Considera anche di aggiungere true come secondo parametro.
Combina il

36

No, non vuoi memorizzarlo come una singola stringa nel tuo database in quel modo.

Potresti usarlo serialize()ma questo renderà i tuoi dati più difficili da cercare, più difficili da lavorare e sprecherà spazio.

Potresti fare anche qualche altra codifica, ma è generalmente soggetta allo stesso problema.

L'intero motivo per cui hai un DB è che puoi svolgere un lavoro del genere in modo banale. Non è necessaria una tabella per archiviare le matrici, è necessaria una tabella che è possibile rappresentare come matrice.

Esempio:

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

Dovresti semplicemente selezionare i dati dalla tabella con SQL, piuttosto che avere una tabella che assomigli a:

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

Non è così che chiunque progetta uno schema in un database relazionale, ne sconfigge totalmente lo scopo.


2
certo che lo è, non devi sfuggire ai delimitatori!
Chris G.

2
@MarcB Rende la codifica a prova di idiota, standard, soggetta a meno bug e facilmente esportabile in un array. Dovrebbe usare un altro tavolo? Probabilmente. È meglio di tutti quelli che dicono implodono? Assolutamente.
Incognito,

6
La risposta giusta a questa domanda sarebbe: non inserire valori serializzati in un RDBMS. Questo è il tipo di cosa che dovrebbe evocare i rapaci .
NullUserException,

1
@timdev: json-escaping può in alcune situazioni corrispondere all'escaping SQL, ma a seconda di ciò alla fine ti brucerà. JSON utilizza le barre rovesciate: cosa succede se si utilizza un DB che non riconosce le barre rovesciate e utilizza virgolette doppie per la fuga? ad es. ''invece di \'?
Marc B,

1
Mentre sono d'accordo con il principio qui espresso (le forme normali sono buone, usare DB per strutturare è buono, duh), qualsiasi risposta che inizia con "No, non vuoi ..." mi fa suonare la campana nella testa. Non hai il contesto completo della domanda del richiedente, e che ci crediate o no, potrebbero avere un motivo eccellente per denormalizzare questi dati particolari e archiviarli in un singolo campo. No, non sei onnisciente; NON sai cosa vuole il richiedente. Inserisci le tue opinioni in un commento , non in una risposta , per favore.
sistema PAUSA

35

Uno dei modi migliori:

echo print_r($array, true);

10
per favore, elabora la tua risposta, mostrando come risolve il problema
Our Man in Bananas,

1
Puoi anche usare: "print_r ($ array, false);", poiché questo stamperà l'array senza restituire un valore. Se viene fornito true, print_r () non stampa da solo e restituisce semplicemente la stringa. Altro su: php.net/manual/en/function.print-r.php
Garrett

Questo dovrebbe essere il migliore in quanto json_decodeconfonde il formato causando confusione.
Aminah Nuraini,

14

implode () :

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

Tuttavia, Incognito ha ragione, probabilmente non vorrai memorizzarlo in questo modo - è uno spreco totale della potenza relazionale del tuo database.

Se non hai impostato la serializzazione, potresti anche prendere in considerazione l'utilizzo di json_encode ()


implode è limitato ad array piatti
ahnbizcad il

11

Questo risparmia CHIAVI E VALORI

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

Spero che aiuti qualcuno.


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

$string_array = json_encode($data);

ora è possibile inserire questo valore $ string_array nel database


5

Per gli array associativi del negozio è possibile utilizzare serialize:

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

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

E carica usando unserialize:

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

print_r($arr);

Ma se è necessario creare .phpfile dinamici con array (ad esempio file di configurazione), è possibile utilizzare var_export(..., true);, in questo modo:

Salva nel file:

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

Ottieni valori array:

$arr = include 'config.php';

print_r($arr);

3

È possibile utilizzare la funzione stringa PHP implode()

Piace,

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

Se, ad esempio, $sports='football'; $festival='janmastami'; $food='biriyani';

Quindi l'output sarebbe:

football|janmastami|biriyani

Per maggiori dettagli sulla funzione implode () di PHP consultare w3schools


0

ci sono molti modi ,

due modi migliori per questo sono

$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

Stai ripetendo le risposte che sono già state fornite. Questo non aggiunge nuovo valore o nuovi metodi.
Tschallacka,

@Tschallacka sì, ma pochissime risposte su questo post forniscono risultati ....
Daud Malik,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.