Visualizzazione dei risultati da 1 a 4 su 4

Discussione: preg_split

  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    590

    preg_split

    salve, sono sicuro che c'è un modo semplice per fare ciò:
    da questa stringa "lorem ipsum ##sic##dolor## videlicet"
    Voglio creare un array nella forma:
    Codice PHP:
    Array
    (
        [
    0] => lorem ipsum
        
    [1] => array([id]=>"sic", [value]=>"dolor")
        [
    2] => videlicet  


    Insomma, i caratteri ## sono dei delimitatori che rappresentano "oggetti" con un id ed un valore.
    Usando il solo preg_split non risolvo
    Codice PHP:
    $matches preg_split("/##[^#]+#[^#]+##/im"$text); 
    restituisce
    Codice PHP:
    Array
    (
    [
    0]=>lorem ipsum
    [1]=>videlicet

    Mi servirebbe un preg_split che però mantiene anche il match della regexp in qualche modo..

  2. #2
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    4,116
    Ciao, più che preg_split potresti usare preg_match_all in modo da analizzare la stringa e recuperare (magari usando dei gruppi di cattura nel pattern) le varie sezioni della stringa stessa. Probabilmente avrai anche bisogno di un ulteriore ciclo per organizzare meglio i dati trovati.

    In ogni caso l'esempio che hai esposto non è sufficiente per comprendere bene la reale situazione. Dovresti chiarire meglio tutte le specifiche del caso, magari con diversi esempi dei possibili scenari che potresti incontrare.

    Ad esempio, la stringa da esaminare deve avere esattamente quelle tre parti disposte in quest'ordine (testo, oggetto [##id##val##], testo), come nel tuo esempio?

    Al contrario, puoi avere delle situazioni del genere?
    (testo, oggetto [##id##val##])
    o (oggetto [##id##val##], testo)
    o anche solo (oggetto [##id##val##])

    E' possibile che ci siano più oggetti da recuperare? Se sì, come possono presentarsi nel testo?
    Ad esempio, è possibile una situazione del genere?
    (testo, oggetto [##id##val##], testo, oggetto [##id##val##], eventuali altri testi e oggetti)

    E in tal caso, è possibile avere più oggetti uno di seguito all'altro, oppure ci deve essere sempre del testo in mezzo?
    Cioè, è possibile una situazione del genere?
    (testo, oggetto [##id##val##], altro oggetto [##id##val##], testo, ecc...)

    La stringa è, o può essere, multi-riga? Te lo chiedo dal momento che nell'espressione regolare stai usando il modificatore m ma la stringa d'esempio è a singola riga.
    In tal caso, come possono essere disposte le varie parti?

    Se hai bisogno di qualche consiglio su come impostare il codice, consiglio di fare quanti più esempi possibili in modo da considerare tutti i possibili scenari e di conseguenza poter stabilire in modo più preciso l'impostazione stessa del codice.
    Prima di postare considera che tra i link utili puoi trovare il 75% delle risposte alle tue domande; il 15% tra i post del forum; il 9% sul web.
    Ti resta l’1% ... usalo bene!

    Le cattive domande sono quelle che non meritano risposta, le buone domande sono quelle che non hanno risposta
    L'Itailano non e nu'opnioine. E' improntate uslaro correattemtne sul froum. Garize!

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    590
    Grazie mille della risposta, effettivamente ho dato ben poche informazioni.
    Comunque ho risolto da solo con una combinazione di preg_match_all, preg_split e poi una funzione zip python-like ("flattando" l'array risultante, che ha una dimensione di troppo).
    Non posto la soluzione perché dubito che qualcuno possa mai avere bisogno di qualcosa così specifico e poi è calata abbastanza nel conteso dei dati che ho. Se credi che, oltre alla spiegazione, possa servire anche il codice, lo pulisco di cose che esulano dal thread e lo posto.

  4. #4
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    4,116
    Bene,
    Non posto la soluzione perché dubito che qualcuno possa mai avere bisogno di qualcosa così specifico e poi è calata abbastanza nel conteso dei dati che ho. Se credi che, oltre alla spiegazione, possa servire anche il codice, lo pulisco di cose che esulano dal thread e lo posto.
    Ovviamente nessuno ti obbliga a postare il codice; personalmente penso sia sufficiente il tuo commento su ciò che hai adoperato per risolvere; se poi ti va di postare il codice ripulito, sei ben accetto... chi sa mai possa risultare utile ad un qualche altro eventuale utente che si trova ad affrontare una situazione simile.

    In qualunque caso, buon proseguimento
    Prima di postare considera che tra i link utili puoi trovare il 75% delle risposte alle tue domande; il 15% tra i post del forum; il 9% sul web.
    Ti resta l’1% ... usalo bene!

    Le cattive domande sono quelle che non meritano risposta, le buone domande sono quelle che non hanno risposta
    L'Itailano non e nu'opnioine. E' improntate uslaro correattemtne sul froum. Garize!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2018 vBulletin Solutions, Inc. All rights reserved.