Eroare syntax error unexpected T_UNSET

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
Avatar utilizator
steell
Mesaje:190

Eroare syntax error unexpected T_UNSET

Salut
Am codul asta care adauga toate fisierele unui folder intr-o matrice, apoi pt fiecare element in parte, verifica daca fisierul respectiv este egal cu o valoarea dintr-un array $pagini, daca este egal sterge elementul din matrice.

Cod: Selectaţi tot

$pagini = array('fisier.txt', 'altul.txt');
$root = getcwd();
$toate = scandir($root);
$nr = count($toate);
for ($c=0; $c<$nr; $c++) {
    if ($toate[$c] == $pagini) {
        $mda = unset($toate[$c]);
    }
}
$toate = array_merge($toate);
$nr = count($toate);
 
Dar imi da eroarea asta:

Cod: Selectaţi tot

Parse error: syntax error, unexpected T_UNSET  on line 11
linia 11 este asta: $mda = unset($toate[$c]);
nu imi dau seama ce are, cred ca difera tipul datelor.

MarPlo Mesaje:4343
Incearca sa folosesti unset() simplu, separat; adica nu atribuit la o variabila (sau functie).
Doar asa:

Cod: Selectaţi tot

//...
unset($toate[$c]);
//...
- Fiindca unset() nu returneaza nici o valoare.

steell Mesaje:190
In loc de :

Cod: Selectaţi tot

$mda = unset($toate[$c]);
Am pus:

Cod: Selectaţi tot

echo 'sunt egale';
Insa nu imi afiseaza acest mesaj. asta inseamna ca nu sunt egale.
Dar nu inteleg de ce nu le considera egale numele paginilor cu valorile din matricea $pagini. Am verificat de o mie de ori si fisierele exista, au acelasi nume si extensie ca cele din matricea $pagini .

In conditia if in loc de $pagini am pus direct fisier.txt si am vazut ca imi afiseaza mesajul pus. Deci nu vrea sa le asocieze cu valorile din matricea $pagini. Dar de ce?
Am pus din nou $pagini insa am specificat pozitia in matrice asa $pagini[0] si am vazut ca imi functioneaza. Deci trebuie sa fac cumva sa preia fiecare element din aceasta matrice si sa il verifice in conditia if().

Pana la urma am rezolvat adaugand inca un for() in acel for():

Cod: Selectaţi tot

$pagini = array('fisier.txt', 'altul.txt');
$root = getcwd();
$toate = scandir($root);
$nr = count($toate);
$pgn = count($pagini);

for ($c=2; $c<$nr; $c++) {
    for ($d=0; $d<$pgn; $d++) {
        if ($toate[$c] == $pagini[$d]) {
            unset($toate[$c]);
        }
    }
}
$toate = array_merge($toate);
$nr = count($toate); 
Dar totusi, nu e normal, trebuia sa preia singur fiecare element in parte din matricea $pagini, ca si in cazul scriptului de cenzurare cuvinte. Ciudata programarea asta.

MarPlo Mesaje:4343
Daca $pagini e un Array, degeaba verifici asa:

Cod: Selectaţi tot

if($toate[$c] == $pagini)
Fiindca nu stie cu ce element din array sa verifice comparatia. Trebuie sa verifici cu elementele din array, nu cu el singur. De aceea merge cu al 2-le for, care parcurge acel array.
Sau, mai simplu, poti face si asa:

Cod: Selectaţi tot

(in_array($toate[$c], $pagini)) 
- Vezi in manualul php functiile pentru lucru cu array, pagina:
php.net/manual/en/ref.array.php

Subiecte similare