Domanda

[leggi la mia EDIT per una migliore Spiegazione]

Ho bisogno di aiuto con un grande stringa ho.

E 'come questo:

$big_string = "TinteiroID:1#TinteiroLABEL:HP CB335EE#TinteiroREF:CB335EE#TinteiroMARCA:HP#TinteiroGENERO:Tinteiro Preto Reciclado#TinteiroQUANTIDADE:23#FIMPROD#TinteiroID:4#TinteiroLABEL:HP 51633 M#TinteiroREF:51633 M#TinteiroMARCA:HP#TinteiroGENERO:Tinteiro Preto Reciclado#TinteiroQUANTIDADE:12#FIMPROD#";

E 'come linee di rottura, ma come spazi bianchi.

Se prendiamo un buon aspetto questo è, sono 2 stringhe in questo modo:

$splited_string = "TinteiroID:1#TinteiroLABEL:HP CB335EE#TinteiroREF:CB335EE#TinteiroMARCA:HP#TinteiroGENERO:Tinteiro Preto Reciclado#TinteiroQUANTIDADE:23#FIMPROD#";

Credo che ho bisogno di un preg_split da ricercare nella $big_string per questo:

TinteiroID:[only numbers]#TinteiroLABEL:[any character, except "#"]#TinteiroREF:[any character, except "#"]#TinteiroMARCA:[any character, except "#"]#TinteiroGENERO:[any character, except "#"]#TinteiroQUANTIDADE:[only numbers]#FIMPROD#

Ho strisce il $splited_string e dentro le [] parentesi quadre cito quali caratteri può essere lì.

Al posto delle [] parentesi quadre che dovrebbe essere il token RegExpression per ogni tipo di caratteri che dovrebbe essere accettato. Ma io so poco di questo.

E poi memorizzare ogni $splited_string in un $array array.

Qualcuno può dare qualche indizio su come realizzare questo?

Grazie

Modifica

cerco di spiegare la mia logica.

Ho questo grande stringa (senza linea di rottura):

  

TinteiroID: 1 #

     

TinteiroLABEL: HP CB335EE #

     

TinteiroREF: CB335EE #

     

TinteiroMARCA: HP #

     

TinteiroGENERO: Tinteiro Preto   Reciclado #

     

TinteiroQUANTIDADE: 23 #

     

FIMPROD #

     
     

TinteiroID: 4 #

     

TinteiroLABEL: HP 51633 M #

     

TinteiroREF: 51633 M #

     

TinteiroMARCA: HP #

     

TinteiroGENERO: Tinteiro Preto   Reciclado #

     

TinteiroQUANTIDADE: 12 #

     

FIMPROD #

Possono essere divisi in 2 più piccola stringa.

Con la preg-split ho voluto assegnare ad ogni stringa splited che si assomigliano questi, ma con valori diversi:

TinteiroID:[only numbers]#

TinteiroLABEL:[any character, except "#"]#

TinteiroREF:[any character, except "#"]#

TinteiroMARCA:[any character, except "#"]#

TinteiroGENERO:[any character, except "#"]#

TinteiroQUANTIDADE:[only numbers]#

FIMPROD#

Quindi aggiungere ogni stringa splited a una matrice:

Array
(
    [0] => TinteiroID:1#TinteiroLABEL:HP CB335EE#TinteiroREF:CB335EE#TinteiroMARCA:HP#TinteiroGENERO:Tinteiro Preto Reciclado#TinteiroQUANTIDADE:23#FIMPROD#
    [1] => TinteiroID:4#TinteiroLABEL:HP 51633 M#TinteiroREF:51633 M#TinteiroMARCA:HP#TinteiroGENERO:Tinteiro Preto Reciclado#TinteiroQUANTIDADE:12#FIMPROD#
)

E poi ci sarà una per ogni ciclo di andare in ogni oggetto nella matrice. [0] [1] ...

Fare un'altra RegExpression per raccogliere i valori e fare qualcosa con quei valori.

Sì, è "disordinato" e richiede molto CPU, ma .. non avere una migliore ideia: S


Modifica

seguendo il consiglio:

Ho fatto questo codice:

$big_string = "TinteiroID:1#TinteiroLABEL:HP CB335EE#TinteiroREF:CB335EE#TinteiroMARCA:HP#TinteiroGENERO:Tinteiro Preto Reciclado#TinteiroQUANTIDADE:23#FIMPROD#TinteiroID:4#TinteiroLABEL:HP 51633 M#TinteiroREF:51633 M#TinteiroMARCA:HP#TinteiroGENERO:Tinteiro Preto Reciclado#TinteiroQUANTIDADE:12#FIMPROD#";CB335EE#TinteiroREF:CB335EE#TinteiroMARCA:HP#TinteiroGENERO:Tinteiro Preto Reciclado#TinteiroQUANTIDADE:23#FIMPROD#";
$array = explode("FIMPROD#", $big_string);

print_r ($array);

Si divide il big_string alla alla fine di ogni "FIMPROD #" il delimitatore per ciascuno di essi.

Ora ho andare sulla matrice, e per ogni valore in esso. Fare qualcosa con esso.

Cercherò che ora ... qualcosa caso posterò sono riuscito a farlo o no.

È stato utile?

Soluzione

perché avete bisogno di regex qui? perché non basta dividere due volte?

$num = 6;            # number of elements to in each splited_string
$out = array();
foreach ($explode('#', $big_string) as $str) {
    $tmp = explode(':', $str, 2);
    if (count($tmp) == 2) {
        $out[] = $tmp[1];
    }
}
$subs = intval(count($out) / $num);  # how many splited_strings in the big string
for ($i=0; $i<$sub; $i+$num) {
    $each_id = array_slice($out, $i, $i+$num);  # contains six strings
}

qui ad ogni iterazione, $each_id conterrebbe sei corde, saresti ancora bisogno di convertire primo e l'ultimo elemento a numeri interi.

Altri suggerimenti

Questo dovrebbe fare allora:

"~TinteiroID:(\d+)#TinteiroLABEL:([^#]+)#TinteiroREF:([^#]+)#TinteiroMARCA:([^#]+)#TinteiroGENERO:([^#]+)#TinteiroQUANTIDADE:(\d+)#FIMPROD#~i"

La difficoltà di utilizzare preg_split () è che ti sembra di richiedere la stringa da raggruppati per due diverse espressioni: \d+ e [^#]+

Credo che si dovrebbe pensare di dividere la stringa in piccolo pezzi e poi mettere un po 'di nuovo insieme.

Cercando di fare la scissione con una sola preg_split () porterà a complicazioni maggiori.

E 'anche difficile vedere le stringhe piena nella tua domanda perché devono essere scorrere a sinistra ea destra.

Modifica:. Sì, come silenzioso fantasma più o meno si dice, non si sta dividendo in un'espressione regolare con [^#]+, hai veramente bisogno di dividere, o meglio ancora esplodere alla # caratteri

Poi si può mettere l'array di nuovo insieme come due o più stringhe più piccole, forse controllando per 'TinteiroID' come il primo elemento di ciascuna delle stringhe.

Prova il codice qui sotto.

 <?php
    $str = "TinteiroID:1#TinteiroLABEL:HP CB335EE#TinteiroREF:CB335EE#TinteiroMARCA:HP#TinteiroGENERO:Tinteiro Preto Reciclado#TinteiroQUANTIDADE:23#FIMPROD#TinteiroID:4#TinteiroLABEL:HP 51633 M#TinteiroREF:51633 M#TinteiroMARCA:HP#TinteiroGENERO:Tinteiro Preto Reciclado#TinteiroQUANTIDADE:12#FIMPROD#";
    preg_match_all("/([A-Za-z]+)\:([^#]+)/", $str, $matches);
    print_r($matches);
    ?>

Hai solo bisogno di un regolare /([A-Za-z]+)\:([^#]+)/ espressione con la funzione preg_match_all per convertire la stringa in un array. Ma non è sicuro se è quello che ti serve.

Il linea PHP regolare tester espressione farà il vostro aiuto.

Lo faccio io ottenere 3 risultati dalla preg_split., Mentre non ci dovrebbero essere 2?

E senza valori?

<?php
$big_string = "TinteiroID:1#TinteiroLABEL:HP CB335EE#TinteiroREF:CB335EE#TinteiroMARCA:HP#TinteiroGENERO:Tinteiro Preto Reciclado#TinteiroQUANTIDADE:23#FIMPROD#TinteiroID:4#TinteiroLABEL:HP 51633 M#TinteiroREF:51633 M#TinteiroMARCA:HP#TinteiroGENERO:Tinteiro Preto Reciclado#TinteiroQUANTIDADE:12#FIMPROD#";
$array = preg_split("~TinteiroID:(\d+)#TinteiroLABEL:([^#]+)#TinteiroREF:([^#]+)#TinteiroMARCA:([^#]+)#TinteiroGENERO:([^#]+)#TinteiroQUANTIDADE:(\d+)#FIMPROD#~i", $big_string);
print_r ($array);
?>

Output:

Array
(
    [0] => 
    [1] => 
    [2] => 
)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top