Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    creare stringa con elementi di array

    Ciao a tutti, spero possiate essermi d'aiuto come spesso accade.

    Supponiamo di avere un array del tipo:

    $array = (lista della spesa, saluti a tutti, pane, pasta, caffe, zucchero, uova, latte);

    di questo array conosco i primi 2 elementi e poi non so quanti generi alimentari ci sono. Voglio creare una stringa del tipo:

    $stringa = "questa è la $array[1] dentro c'è $array[3] poi $array[4].... e concludo con $array[2]";

    che stampata su un file di testo mi dia

    "questa è la lista della spesa, dentro c'è pane poi pasta poi caffè poi zucchero poi uova poi latte e concludo con saluti a tutti"

    il contatore del ciclo for per la lettura dell'array lo imposto in base al numero degli elementi dell'array meno 2 (i primi 2) ma poi come faccio a creare la stringa?

    Scusate la vaghezza
    Viviamo tutti in una palude di fango, ma alcuni di noi guardano le Stelle http://www.comunicareoltre.it

  2. #2
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    codice:
    $numeroElementi = count($array);
    $stringa = $array[0];
    for($i = 2; $i < $numeroElementi; $i++) {
      $stringa .= $array[$i];
    }
    $stringa.= $array[1];
    ciaociao

  3. #3
    $stringa = 'Questa è la '.array_shift($array);
    $end = array_shift($array);

    $stringa .= ", dentro c'è ".implode(' poi ', $array)." e concludo con ".$end;

  4. #4
    Ho compreso entrambi gli esempi, utilizzerò quello di Gianiaz perchè nella vaghezza dell'esempio ho dato per scontato che gli elementi dell'array siano separati nella stringa da un poi, ma potrebbero essere separati da un certo numero di parole diverse... bando alla vaghezza e cerchiamo di spiegarci meglio:

    Ho un file XML che grazie ad una funzione trovata in rete ho convertito in array. L'array è del tipo:

    Array(
    [0]=>Array(
    [name]=>ELENCO
    [attrs]=>Array()
    [child]=>Array(
    [0]=>Array(
    [name]=>NEWS
    [attrs]=>Array(
    [DATO]=> corpo della prima news
    [DATAS]=> data della prima news
    )
    )
    [1]=>Array(
    [name]=>NEWS
    [attrs]=>Array(
    [DATO]=> corpo della seconda news
    [DATAS]=> data della seconda news
    )
    )
    )
    )
    )

    L'array rappresenta come ho detto un file XML del tipo

    <elenco>
    <news dato ="corpo della prima news" datas="data della prima news">
    </news>
    <news dato ="corpo della seconda news" datas="data della seconda news">
    </news>
    </elenco>

    Seguendo l'esempio di Gianiaz è corretto scrivere?

    Codice PHP:
    $numeroelementi count($data[0][child]); //conto gli elementi dell'array che contiene gli array (corpo, data)
    $towrite "<".$data[0][name].">" //la stringa $towrite inizia con <elenco>
    // imposto il ciclo for da 0 a 2 in questo caso e continuo la stringa
    for ($a=0;$a<$numeroelementi;$a++){
    $towrite. = "<news dato = \"".$data[0][child][$a][attrs][dato]."\" datas = \"".$data[0][child][$a][attrs][datas]."\"></news>";
    }
    $towrite. = "</".$data[0][name].">"
    Una volta avuta questa stringa cancello il file XML da cui l'ho prelevata e lo riscrivo e utilizzo questo ciclo per cancellare elementi del file XML, che dite?
    Viviamo tutti in una palude di fango, ma alcuni di noi guardano le Stelle http://www.comunicareoltre.it

  5. #5
    Senza entrare nel merito, non fare mai una cosa del genere:
    $data[0][child]

    le chiavi non numeriche vanno tra apici singoli o doppi, così
    $data[0]['child']

    Altrimenti stai dicendo al PHP di usare come chiave la COSTANTE child, che non è definita.

  6. #6
    OTTIMO SUGGERIMENTO... non lo sapevo, è la prima volta che uso indici non numerici.

    Perc ompletare ancora di più la cosa scrivo il codice completo per la cancellazione delle news. Durante la visualizzazione accanto a ciascuna news appare un link il cuo testo è "cancella" il cui href è verso la stessa pagina che visualizza tipo Cancella Dove $ì è il posto che occupa la news nell'array $data[0][child]

    Ecco il codice che vorrei usare corretto con gli apici grazie a skidz):

    Codice PHP:
    $action $_GET['action']; //passo la variabile $action che indica il posto che occupa la news da cancellare tramite GET
    unset($data[0]['child'][$action]); //cancello l'elemento dell'array che contiene la news da cancellare
    $numeroelementi count($data[0]['child']); //conto gli elementi dell'array che contiene gli array (corpo, data) 
    $towrite "<".$data[0]['name'].">" //la stringa $towrite inizia con <elenco> 
    // imposto il ciclo for da 0 a 2 in questo caso e continuo la stringa 
    for ($a=0;$a<$numeroelementi;$a++){ 
    $towrite. = "<news dato = \"".$data[0]['child'][$a]['attrs'][dato]."\" datas = \"".$data[0]['child'][$a]['attrs'][datas]."\"></news>"

    $towrite. = "</".$data[0][name].">"// l'array termina con </elenco>

    //scrivo sul file la stringa $towrite che ora contiene tutto tranne la news cancellata o almeno lo spero
    $file "file.xml";
    $fp fopen($file"w");
    $fw fwrite($fp$towrite);
    fclose($fp); 
    Viviamo tutti in una palude di fango, ma alcuni di noi guardano le Stelle http://www.comunicareoltre.it

  7. #7
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    occhio a quel che fai, passare in GET l'id di un record che devi cancellare è molto pericoloso, perchè io potrei cambiare il contenuto della var senza troppi problemi.

    Quindi

    1. Quando nella pagina prendi $_GET['id'] costringilo a intero in modo che se non è un numero varrà 0.

    2. Magari manda l'id in POST (meglio).

    ciao

  8. #8
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    occhio a quel che fai, passare in GET l'id di un record che devi cancellare è molto pericoloso, perchè io potrei cambiare il contenuto della var senza troppi problemi.

    Quindi

    1. Quando nella pagina prendi $_GET['id'] costringilo a intero in modo che se non è un numero varrà 0.

    2. Magari manda l'id in POST (meglio).

    ciao

    edit, in questo caso non è su db, ma meglio fare lo stesso i controlli.

  9. #9
    Grazie per il suggerimento,

    Ho testato il codice proposto facendo alcune correzioni (quindi lo riposto) però succede una cosa strana.

    Se provo a cancellare la prima news (ovvero $action == 0) il file diventa

    <ELENCO><news dato = "" datas = ""></news></ELENCO>

    Se provo a cancellare la seconda news il file diventa

    <ELENCO></ELENCO>

    Non capisco perchè...

    Dov'è l'errore?

    Di seguito il codice corretto:

    Codice PHP:
    $action $_GET['action']; //passo la variabile $action che indica il posto che occupa la news da cancellare tramite GET 
    unset($data[0]['child'][$action]); //cancello l'elemento dell'array che contiene la news da cancellare 
    $numeroelementi count($data[0]['child']); //conto gli elementi dell'array che contiene gli array (corpo, data) 
    $towrite "<".$data[0]['name'].">"//la stringa $towrite inizia con <elenco> 
    // imposto il ciclo for da 0 a 2 in questo caso e continuo la stringa 
    for ($a=0$a $numeroelementi$a++){  
    $towrite .= "<news dato = \"".$data[0]['child'][$a]['attrs']['dato']."\" datas = \"".$data[0]['child'][$a]['attrs']['datas']."\"></news>";  
    }  
    $towrite .= "</".$data[0]['name'].">"// l'array termina con </elenco> 
    $towritenc utf8_encode($towrite); //codifica UTF8 potrei usare lo stesso nome di variabile, ma crepi l'avarizia, poi non mi raccapezzo più

    //scrivo sul file la stringa $towrite che ora contiene tutto tranne la news cancellata o almeno lo spero 

    $fp fopen($fdata"w"); 
    $fw fwrite($fp$towritenc); 
    fclose($fp); 
    Viviamo tutti in una palude di fango, ma alcuni di noi guardano le Stelle http://www.comunicareoltre.it

  10. #10
    Un piccolo UP!!!!

    Non voglio toglere spazio a nessuno, ma non riesco a capire perchè se cerco di visualizzare qualsiasi altro elemento dell'array in questione, sia esso un altro array o un elemento qualsiasi ci riesco, mentre quelli che mi servono no? cosa c'è di sbagliato in quel codice?
    Viviamo tutti in una palude di fango, ma alcuni di noi guardano le Stelle http://www.comunicareoltre.it

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 © 2025 vBulletin Solutions, Inc. All rights reserved.