Newsgroup: it.comp.www.php
Titolo: cancellazione ricorsiva elementi array

<?php $array_accessi=array(); ?>
<?php array_push($array_accessi, array("127.0.0.1", "04/07/2006",
"11:10:04",
"c:/programmi/easyphp/www/intranet/prove/prove_array_somma.php")); ?>
<?php array_push($array_accessi, array("127.0.0.1", "04/07/2006",
"11:15:24",
"c:/programmi/easyphp/www/intranet/prove/prove_array_somma.php")); ?>
<?php array_push($array_accessi, array("127.0.0.1", "04/07/2006",
"15:14:32",
"c:/programmi/easyphp/www/intranet/prove/prove_array_somma.php")); ?>
<?php array_push($array_accessi, array("127.0.0.1", "05/07/2006",
"14:27:17",
"c:/programmi/easyphp/www/intranet/prove/prove_array_somma.php")); ?>
<?php array_push($array_accessi, array("127.0.0.1", "05/07/2006",
"14:30:02",
"c:/programmi/easyphp/www/intranet/prove/prove_array_somma.php")); ?>
<?php array_push($array_accessi, array("127.0.0.1", "05/07/2006",
"14:30:53",
"c:/programmi/easyphp/www/intranet/prove/prove_array_somma.php")); ?>
<?php array_push($array_accessi, array("127.0.0.1", "06/07/2006",
"08:46:21",
"c:/programmi/easyphp/www/intranet/prove/prove_array_somma.php")); ?>
<?php array_push($array_accessi, array("127.0.0.1", "06/07/2006",
"08:46:44",
"c:/programmi/easyphp/www/intranet/prove/prove_array_somma.php")); ?>
ho un array di questo genere e vorrei cancellare in modo ricorsivo alcuni
elementi dell'array, che a loro volta sono array (come si evince dal
codice sopra)
ad esempio se volessi cancellare tutti gli elementi con data 06/07/2006
(colonna 1 array) come devo impostare il foreach o qualcosa di simile?
eper la cancellazione posso usare unset? se si come?
ho già cercato nei vecchi post e su google ma nonho trovato nulla che mi
chiarisse le idee (bisogna anche saper copiare!!!)
ciao a tutti e buona giornata
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 codice sopra)
dal codice sopra si evince solo confusione
   posta un print_r($array_accessi) se esegui da shell o
un echo '<pre>', print_r($array_accessi, 1), '</pre>' se esegui da
browser
  un print_r *parziale* dei dati chiaramente

 eper la cancellazione posso usare unset? se si come?
foreach o altro (array_map?) usi unset
unset ($array[$indice])
-- 
"20060207: buongiorno italia, buongiorno maria.
con gli occhi pieni di malinconia"

hk3project ha scritto:




Array
(
    [0] => Array
        (
            [0] => 127.0.0.1
            [1] => 04/07/2006
            [2] => 11:10:04
            [3] =>
c:/programmi/easyphp/www/intranet/prove/prove_array_somma.php
        )
    [1] => Array
        (
            [0] => 127.0.0.1
            [1] => 04/07/2006
            [2] => 11:15:24
            [3] =>
c:/programmi/easyphp/www/intranet/prove/prove_array_somma.php
        )
    [2] => Array
        (
            [0] => 127.0.0.1
            [1] => 04/07/2006
            [2] => 15:14:32
            [3] =>
c:/programmi/easyphp/www/intranet/prove/prove_array_somma.php
        )
    [3] => Array
        (
            [0] => 127.0.0.1
            [1] => 05/07/2006
            [2] => 14:27:17
            [3] =>
c:/programmi/easyphp/www/intranet/prove/prove_array_somma.php
        )
    [4] => Array
        (
            [0] => 127.0.0.1
            [1] => 05/07/2006
            [2] => 14:30:02
            [3] =>
c:/programmi/easyphp/www/intranet/prove/prove_array_somma.php
        )
    [5] => Array
        (
            [0] => 127.0.0.1
            [1] => 05/07/2006
            [2] => 14:30:53
            [3] =>
c:/programmi/easyphp/www/intranet/prove/prove_array_somma.php
        )
    [6] => Array
        (
            [0] => 127.0.0.1
            [1] => 06/07/2006
            [2] => 08:46:21
            [3] =>
c:/programmi/easyphp/www/intranet/prove/prove_array_somma.php
        )
    [7] => Array
        (
            [0] => 127.0.0.1
            [1] => 06/07/2006
            [2] => 08:46:44
            [3] =>
c:/programmi/easyphp/www/intranet/prove/prove_array_somma.php
        )
)
ecco quello che mi hai chiesto
ho imparato già una cosa nuova (bello questo output!!!)
ciao e per ora grazie


 unset ($array[$indice])
ho fatto cosě unset($array_accessi[2]); ma non mi cancella l'elemento
forse perchč l'array č in un file incluso "include
($_SERVER['DOCUMENT_ROOT'].'/php/accessi.php');"?
fammi sapere se puoi


 )
uno spunto da cui partire ...:
//$array_accessi = ....
$dataDaCancellare = '06/07/2006';
print_r($array_accessi);
$accessiFiltrati = array_filter($array_accessi, 'eliminaData');
print_r($accessiFiltrati);
function eliminaData($aElement) {
     global $dataDaCancellare;
     return $aElement[1] != $dataDaCancellare;
}

 fammi sapere se puoi
Dipende da cosa e come lo fai. vedi la do di unset()
"Se si applica unset() ad una variabile globale all'interno di una 
funzione, sarà distrutta solo la variabile locale. Nell'ambiente 
chiamante, la variabile manterrà il medesimo valore che aveva prima 
dell'uso di unset()."
e anche
"Nel caso di una variabile PASSATA PER RIFERIMENTO ad una funzione, 
l'uso della funzione unset() distrugge solo la copia locale della 
variabile. Nell'ambiente chiamante, la variabile manterrà il medesimo 
valore che aveva prima dell'uso di unset()."


 valore che aveva prima dell'uso di unset()."
la cancello da un'altro file dopo aver incluso il file contenente l'array
in questo modo:
<?php
include ($_SERVER['DOCUMENT_ROOT'].'/php/accessi.php');
unset($array_accessi[2]);
?>
molto probabilmente non funziona perchè l'array originale è contenuto nel
file accessi.php
come posso fare per eliminare l'elemnto allora?


hk3project ha scritto:



ottimo!!! gentilissimo e preparato (non come me, spero solo per ora, un
domani chissà....)
l'unico problema che mi rimane ora è l'unset che non cancella nulla (vedi
post di risposta a magilla)
ciao e grazie


 
no, non può essere.
<?php
$array= array("ugo", "pino", "lino");
unset ($array[1]);
print_r($array);
?>
stampa:
Array
(
     [0] => ugo
     [2] => lino
)
dipende dallo scope della variabile array


 dipende dallo scope della variabile array
ho fatto una caz....!!!
non me lo cancella perchè è come se lo ricreasse sempre 
infatti riguardando il codice iniziale con array_push l'unicasoluzione è
cancellare la riga nel file array_accessi.php
un bel guaio!!
ora devo ripensae come fare per cancellare o usareun sistema diverso per
memorizzare i log di accesso 
avevo fatoo così perchè non volevo che il file txt degli accessi fosse
visibile
se qualcuno ha qualche idea mi faccia sapere
grazie ancora per la risposta


 post di risposta a magilla)
non hai bisogno di fare l'unset di nulla a quanto ho capito ti basta
http://it.php.net/array_diff

 
http://it.php.net/array_diff


 il codice nonè gran che ma non mi sembra proprio un cesso... o forse sì?
  personalmente evito di usare "global" e ti consiglio di farlo
  hai risolto con array_diff?

   hai risolto con array_diff?
non ho ancora provato am ho visto che posso usare sia array_diff che
array_filter
penso che con entrambe le soluzioni riuscirò a risolvere il problema
grazie per la pazienza


 
Visibile dove e da chi?
Se lavori sulle directory e sui permessi del file?
Invece di impegolarti in questa gestione degli array?
Altra soluzione usa un db.
-- 
Cordialmente.
Melus.
dal mio e-mail togli i simboli di Zorro.

   hai risolto con array_diff?
non ho ancora provato am ho visto che posso usare sia array_diff che
array_filter
penso che con entrambe le soluzioni riuscirò a risolvere il problema
grazie per la pazienza


 per quale motivo? (scusa la mia ignoranza) problemi di sicurezza?
Il global e` almeno tanto pericoloso quanto il goto.
E me ne sto rendendo conto nel debug di un sito fatto da un altro, che
usa dei global dentro alcune funzioni definite in un file incluso da
diverse pagine, e ogni pagina usa nomi diversi per le variabili, al
punto che alcuni global non servono a niente in alcune pagine ma sono
fondamentali in altre (che includono quel file), e io devo farmi gli
schemini su carta delle relazioni tra i file e le variabili.
Un incubo che ti consiglio di evitare.
Bye.
-- 
Alessandro Pellizzari

 
ne sono sicuro

 Altra soluzione usa un db.
sicuramente il db č la soluzione migliore ma volevo provare una soluzione
diversa perchč non tutti i siti (specialmente quelli free) hanno il db a
disposizione 
per i permessi sui file come potrei comportarmi?
se il file lo volessi leggere solo io, quindi non dovrebbe essere visibile
dal browser, da un una pagina php ci sarebbe una soluzione?
io non la conosco se tu ne sei a conoscenza fammi sapere che mi
interesserebbe molto
ciao e grazie


 
Per prima cosa non mettere il file di log nella directory root dei tuoi 
documenti. E cosě dal web non la vedi piů.
Oppure se vuoi lasciarla, la metti in una sotto directory protetta da 
username e password tramite apache....ammesso che usi apache.
