Autor Zpráva
majo80
Profil *
Zdravím, potreboval by som vedieť ako spracovať toto:

Array ( 
[0] => Array ( [0] => 1520 [1] => Titul číslo 0 [2] => 11.95 [3] => 9.56 [4] => Popis krátky 0. [5] => Popis dlhý 0. [6] => kľúčové slová 0 [7] => 100 [8] => 1 [9] => Maxim E. Matkin [10] => Próza, Poézia [11] => ks [12] => 1 [13] => l135155.jpg ) 
[1] => Array ( [0] => 1520 [1] => Titul číslo 1 [2] => 11.95 [3] => 9.56 [4] => Popis krátky 1. [5] => Popis dlhý 1. [6] => kľúčové slová 1 [7] => 100 [8] => 1 [9] => Maxim E. Matkin [10] => Próza, Poézia [11] => ks [12] => 1 [13] => l135155.jpg ) 
[2] => Array ( [0] => 1520 [1] => Titul číslo 2 [2] => 11.95 [3] => 9.56 [4] => Popis krátky 2. [5] => Popis dlhý 2. [6] => kľúčové slová 2 [7] => 100 [8] => 1 [9] => Maxim E. Matkin [10] => Próza, Poézia [11] => ks [12] => 1 [13] => l135155.jpg ) 
[3] => Array ( [0] => 1520 [1] => Titul číslo 3 [2] => 11.95 [3] => 9.56 [4] => Popis krátky 3. [5] => Popis dlhý 3. [6] => kľúčové slová 3 [7] => 100 [8] => 1 [9] => Maxim E. Matkin [10] => Próza, Poézia [11] => ks [12] => 1 [13] => l135155.jpg ) 
[4] => Array ( [0] => 1520 [1] => Titul číslo 4 [2] => 11.95 [3] => 9.56 [4] => Popis krátky 4. [5] => Popis dlhý 4. [6] => kľúčové slová 4 [7] => 100 [8] => 1 [9] => Maxim E. Matkin [10] => Próza, Poézia [11] => ks [12] => 1 [13] => l135155.jpg ) 
)

Pokiaľ možno spracovať to po krokoch, teda najskôr jeden riadok, vytiahnuť jednotlivé polia, potom druhý,atď....

Viete mi pomôcť? Ďakujem.
panther
Profil
majo80:
jak zpracovat? Co má být výstupem? Zpracovat se to dá mnoha způsoby, záleží na výstupu, který se ti hodí.

Každopádně se podívej na cykly, asi foreach.
majo80
Profil *
panther:
Výstup má byť v každom kroku napr. takýto: (pre [0] => Array)
$data1 = 1520;
$data2 = Titul číslo 0;
$data3 = 11.95;
$data4 = 9.56;
$data5 = Popis krátky 0.;
$data6 = Popis dlhý 0.;
$data7 = kľúčové slová 0;
$data8 = 100;
$data9 = 1;
$data10 = Maxim E. Matkin;
$data11 = Próza, Poézia;
$data12 = ks;
$data13 = 1;
$data13 = l135155.jpg;
Rellik
Profil
A jaký v tom máš problém? Zkoušel jsi to nějak řešit? Řešení není zas tak složité jak to možná vypadá. Stačí ti v podstatě foreach ve foreachu. Trochu pohledej a jak ti to dál nepůjde zkus napsat jak jsi to zkoušel řešit a třeba někdo nakopne dál. Bez trochy snahy ti nikdo konkrétní kód asi vymýšlet nebude... Nápovědu už máš... ;)
panther
Profil
majo80:
převést pole do takhle indexovaných proměnných je holý nesmysl. To ani nedělej... máš někde chybu v návrhu aplikace, zaměř se na ní. Číslované proměnné jsou blbost.
majo80
Profil *
Rellik:
Jasné, určite niečo skúsim, potreboval som len nakopnúť správnym smerom.

panther:
Prečo je to blbosť? Pokiaľ potrebujem ďalej pracovať s jednotlivými výstupmi, tak ako inak ich získať?
panther
Profil
majo80:
proč nepracuješ přímo s tím polem? To je na takovou práci přeci ideální, ne?

Pokud máš (a začátečníci mívají docela často) proměnné promenna1, promenna2, promenna3, je jediným správným řešením je převést to na pole. Ty pole máš a jdeš, úplně nepochopitelně, opačným směrem.
Rellik
Profil
majo80:
tak ako inak ich získať
No z tohoto pole cos ukázal můžeš k jednotlivým položkám přistupovat tímto způsobem:

$výstup = $pole[0][1]; // první položka z prvního pole v poli
$jiný výstup =$pole[1][2];  // druhá položka z druhého pole v poli
$uplně jiný výstup =$pole[4][6];  // šestá položka z pátého pole v poli
 

ty pole můžeš definovat rovnou do scriptu kam potřebuješ... bez toho aniž bys musel plnit ty proměnné 1,2,... až nevímkolik...

Zkus si to pole vypsat pomocí print_r($pole); a uvidíš jak je to řazeno a podle toho pak dosazuj ty věci z pole kam potřebuješ... ;)
peta
Profil
[#3]majo80
for ($i=0;$i<count($pole))
for ($j=0;$j<count($pole[$i]))
${'data'.$j} = $pole[$i][$j];
Ale, jak uz psali ostatni, je to naprosty nesmysl prevadet na promenne, kdyz to mas hezky v poli.
majo80
Profil *
Takže som skúsil niečo takéto, ale chybička sa našla:

$pole = Array ( 
[0] => Array ( [0] => 1520 [1] => Titul číslo 0 [2] => 11.95 [3] => 9.56 [4] => Popis krátky 0. [5] => Popis dlhý 0. [6] => kľúčové slová 0 [7] => 100 [8] => 1 [9] => Maxim E. Matkin [10] => Próza, Poézia [11] => ks [12] => 1 [13] => l135155.jpg ) 
[1] => Array ( [0] => 1520 [1] => Titul číslo 1 [2] => 11.95 [3] => 9.56 [4] => Popis krátky 1. [5] => Popis dlhý 1. [6] => kľúčové slová 1 [7] => 100 [8] => 1 [9] => Maxim E. Matkin [10] => Próza, Poézia [11] => ks [12] => 1 [13] => l135155.jpg ) 
[2] => Array ( [0] => 1520 [1] => Titul číslo 2 [2] => 11.95 [3] => 9.56 [4] => Popis krátky 2. [5] => Popis dlhý 2. [6] => kľúčové slová 2 [7] => 100 [8] => 1 [9] => Maxim E. Matkin [10] => Próza, Poézia [11] => ks [12] => 1 [13] => l135155.jpg ) 
[3] => Array ( [0] => 1520 [1] => Titul číslo 3 [2] => 11.95 [3] => 9.56 [4] => Popis krátky 3. [5] => Popis dlhý 3. [6] => kľúčové slová 3 [7] => 100 [8] => 1 [9] => Maxim E. Matkin [10] => Próza, Poézia [11] => ks [12] => 1 [13] => l135155.jpg ) 
[4] => Array ( [0] => 1520 [1] => Titul číslo 4 [2] => 11.95 [3] => 9.56 [4] => Popis krátky 4. [5] => Popis dlhý 4. [6] => kľúčové slová 4 [7] => 100 [8] => 1 [9] => Maxim E. Matkin [10] => Próza, Poézia [11] => ks [12] => 1 [13] => l135155.jpg ) 
);
      
echo $pole[0][1];

vypíše to problém:
Parse error: syntax error, unexpected '[', expecting ')' in

Ak celé array dám do úvodzoviek, tak zase:
Fatal error: Cannot use string offset as an array in
Rellik
Profil
Problém ti ho vypsalo, tak h naprav... u všech hodnot ti chybí uzovoky...

$pole = Array ( 
[0] => Array ( [0] => '1520' [1] => 'Titul číslo 0' [2] => '11.95' [3] => '9.56' [4] => 'Popis krátky 0.'... atd
abc
Profil
Rellik, majo80:
A čárky..
$pole = Array ( 
[0] => Array ( [0] => '1520', [1] => 'Titul číslo 0', [2] => '11.95', [3] => '9.56', [4] => 'Popis krátky 0.'
Rellik
Profil
abc:
Jo ty taky... na to sem zapomněl... :)
majo80
Profil *
Fúha, no to sa budem musieť na to lepšie pozrieť, pretože kód ktorý mi vypisuje to pole som nerobil ja a budem sa musieť nejako dostať do toho, kde to mám pridať a ako. Ak by ale niekto mal chvíľu čas, a chcel urobiť dobrý skutok a pomôcť mi, tak tu je ten kód:

function csvstring_to_array($string, $CSV_SEPARATOR = ';',
 $CSV_ENCLOSURE = '"', $CSV_LINEBREAK = "\r\n") {
$array1 = array();
$array2= array();    
$array1=preg_split('#'.$CSV_LINEBREAK.'#',$string);
for($i=0;$i<count($array1);$i++){
for($o=0;$o<strlen($array1[$i]);$o++){
if(preg_match('#^'.$CSV_ENCLOSURE.'#',
substr($array1[$i],$o))){
if(!preg_match('#^"(([^'.
$CSV_ENCLOSURE.']*('.
$CSV_ENCLOSURE.$CSV_ENCLOSURE
.')?[^'.$CSV_ENCLOSURE.']*)*)'.
$CSV_ENCLOSURE.$CSV_SEPARATOR.'#i',substr($array1[$i],$o,
strlen($array1[$i])),$mot)){
$mot[1]=substr(substr($array1[$i],$o,strlen($array1[$i])),1,-1);
}$o++;$o++;
}
else{if(!preg_match('#^([^'.$CSV_ENCLOSURE.
$CSV_SEPARATOR.']*)'.$CSV_SEPARATOR.'#i',
substr($array1[$i],$o,strlen($array1[$i])),$mot)){
$mot[1]=substr($array1[$i],$o,strlen($array1[$i]));
}
}
$o=$o+strlen($mot[1]);
$array2[$i][]=str_replace($CSV_ENCLOSURE.$CSV_ENCLOSURE,
$CSV_ENCLOSURE,$mot[1]);
}
}
return $array2;
}

$results = print_r(csvstring_to_array("test.csv"), true);

Ale ďakujem veľmi moc za vaše rady...
abc
Profil
majo80:
Moc se mi nechce zkoumat ta funkce, ale nestačilo by ji nahradit fgetcsv?
majo80
Profil *
abc:
fgetcsv robilo problémy pri špeciálnych znakoch v CSV súbore....
juriad
Profil
majo80:
Ta funkce csvstring_to_array funguje více-méně dobře, tady chybu nehledej.

Ty jen motáš dohromady dvě různé "reprezentace pole". výsledek print_r slouží jen pro člověka. print_r zde bylo zmíněno jako způsob, jak se TY můžeš podívat na to, co nějaká proměnná skutečně obsahuje. Proto výstup print_r není a nikdy nebude validní zápis pole v PHP.

$results = csvstring_to_array("test.csv"); // funkce vrací to pole, které potřebuješ
echo $results[0][1]; // už bude fungovat
majo80
Profil *
juriad:
jednoduché, rýchle a hlavne fungujúce. ďakujem, no idem študovať viac o poliach...

A ďakujem aj ostatným za ich čas a pomoc.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0