2015-11-23 13 views
6

Sto raschiando un sito Web utilizzando php per ottenere alcuni dati. I dati che ottengo sono un array javascript valido.Conversione stringa javascript in array php

  "['v42, 2015', 23428, 30243, 76993] 
       , 
      ['v43, 2015', 24060, 30401, 73412] 
       , 
      ['v44, 2015', 22855, 29720, 71573] 
       , 
      ['v45, 2015', 24455, 30757, 78991] 
       , 
      ['v46, 2015', 24275, 30398, 84424]" 

Ora ho questa stringa in php, ma come posso convertirla in un array php?

+3

Si prega di (ri) prendere la [giro], dare un'occhiata in giro, e leggere il [aiuto], in particolare [* Come faccio a chiedere una buona domanda? *] (/ help/how-to-ask) Cosa hai provato? Cosa hai bloccato? –

risposta

6
$string = "['v42, 2015', 23428, 30243, 76993] 
       , 
      ['v43, 2015', 24060, 30401, 73412] 
       , 
      ['v44, 2015', 22855, 29720, 71573] 
       , 
      ['v45, 2015', 24455, 30757, 78991] 
       , 
      ['v46, 2015', 24275, 30398, 84424]"; 

Si tratta di serie una valida js se si aggiunge il corretto inizio & estremità quadrata parentesi delimitatore. Inoltre, per rispettare i requisiti del parser di php json, i delimitatori di stringhe devono essere quotati a doppia virgola anziché a virgolette singole, quindi è necessario eseguire una sostituzione rapida.

È quindi possibile decodificarlo in questo modo:

$ary = json_decode('['.str_replace("'",'"',$string).']', true); 
+0

non so perché ho ottenuto 'null' dal tuo metodo – Andrew

+1

@swidmann probabilmente ha individuato il problema, le virgolette singole devono essere sostituite con virgolette doppie. aggiornando la mia risposta. – Calimero

0

È possibile provare a sostituire la [ ] con '' e poi rompere la corda.

$string = str_replace(']', '', str_replace('[', '',$string)); 
$array = explode(',', $string); 
2

Le virgolette singole possono essere valide in JS, ma JSON a volte ha un problema con esso. Si può provare qui: JSONLint

Per ottenere un JSON valida, basta sostituire le virgolette singole ' con virgolette ", per ottenere un array con gli array si deve circondare la stringa con staffe [].

Prova questo codice di esempio:

$string = "['v42, 2015', 23428, 30243, 76993] 
       , 
      ['v43, 2015', 24060, 30401, 73412] 
       , 
      ['v44, 2015', 22855, 29720, 71573] 
       , 
      ['v45, 2015', 24455, 30757, 78991] 
       , 
      ['v46, 2015', 24275, 30398, 84424]"; 

$string = str_replace("'" , '"', $string); 
$string = '['.$string.']'; 

echo "<pre>"; 
var_dump(json_decode($string)); 
+1

buon punto individuare il problema delle citazioni. – Calimero

+1

bene grazie, buona risposta anche a te;) – swidmann

Problemi correlati