Tema: Re: q:del masyvu is function
Autorius: Asdf hjkl
Data: 2009-10-24 00:11:25
Aciu labai uz issamu atsakyma!
viskas dabar veikia gerai.
tiesiog kaip nepatyres-neisiskaitantis buvau uzsiciklines tik ant php.net 
rasomo "moves the internal data pointer ahead. ", o kad pries tai parasyta 
kad fetch'ina row o ne rowS tai ignoravau iki negalejimo :]

"Justas Butkus" <butkus.justas@gmail.com> wrote in message 
news:hbsvqn$ooi$1@trimpas.omnitel.net...
> Labas.
>
> PHP puikiai grąžina masyvą tokį, koks suformuotas.
>
> Pirmas dalykas, tai ta funkcija toli gražu nesukuria daugiamačio masyvo, 
> kuriame būtų eilutės.
> Ta funkcija galėtų veikti kaip nors taip (negerovių joje netrūksta, bet 
> juk ne apie tai čia):
>
> function listing() {
>   global $link;
>   $query_str = 'SELECT * FROM `table`';
>   $res = mysql_query($query_str, $link);
>
>   $rows = array();
>   while($row = mysql_fetch_array($res, MYSQL_NUM)) {
>     $rows[] = $row;
>   }
>   return $rows;
> }
>
>
>
> Antras dalykas - sprendimai panaudojimo vietoje:
>
> ==== a ====
> $row = current($listingas);
> while(!empty($row)) {
>     var_dump($row);
>     $row = next($listingas);
> }
>
> ==== b ====
> array_walk($listingas, create_function('$r, $i', 'var_dump($r);'));
>
> ==== c ====
> foreach($listingas as $row) {
>     var_dump($row);
> }
>
>
>
> Visi variantai turėtų suteikti tą patį rezultatą.
> Klausimas - ką naudoti.
> PHP masyvo perėjimui turi funkciją foreach:
> http://lt.php.net/manual/en/control-structures.foreach.php
>
> while(<pakeitimo vieta>)
> parodytoje vietoje tikrina reiškinio teisingumą.
> Kadangi jokie pakeitimai neatliekami, tai while($row = $masyvas) visuomet 
> yra teisinga ir spausdina vieną masyvo eilutę amžinai.
> while($row = mysql_fetch_array($result))
> veikia dėl to, kad po mysql_fetch_array($result) pakeičiamas pats $result 
> ir kitą kartą pašaukus mysql_fetch_array rezultatas bus jau kitoks.
> mysql_fetch_array galima įsivaizduoti taip:
>
> function my_mysql_fetch_array(&$input) {
>     $currentRow = $input[0];
>     unset($input[0]);
>     return $currentRow;
> }
> Tuomet, jei paduotume jai masyvą:
> $masyvas = array('Geltona', 'Mėlyna', 'Žalia');
> while($eilute = my_mysql_fetch_array($masyvas));
> po kiekvieno ciklo sumažėtų pats $masyvas kintamasis.
>
> Veikia ne visai taip mysql_fetch_array, reikėtų ir apie objektus 
> paskaityti, bet tuo tarpu - kodėl gi ne.
>
> www.php.net ateičiai. ;)
>
> Iš kitos pusės - viską verta patikrinti savomis rankomis.
> Pvz. savo atveju galėjai prieš 'return $query' įterpti eilutę 
> 'print_r($query);' ir būtum pamatęs, kad ten toli gražu ne toks ilgas 
> masyvas, kaip manei.
>
>
>
> --
> JB
>
> Asdf hjkl rašė:
>> Sveiki.
>> iskilo tokia problema, gal kas uzves ant kelio
>>
>> turiu viename faile funkcija
>> function listing()
>> {
>>    $query_string = "
>>                              SELECT *
>>                              FROM table
>>                              WHERE visibility = '0'
>>                              ORDER BY name ASC
>>                              LIMIT 0, 10
>>                              ";
>>    $query = mysql_query($query_string);
>>    $query = mysql_fetch_array(mysql_query($query_string),MYSQL_NUM);
>>     return $query;
>> }
>> funkcijoje susiformuojamas dvimatis masyvas
>>
>> tada kitame faile as naudoju sita funkcija ir bandau issivesti eilutes ir 
>> stai cia prasideda bedos
>>
>> $listingas = listing()
>>
>> while($row = $listingas)
>>    {
>>        var_dump($row)
>>    }
>>
>> situ atveju sistema uzsiloopin'a amziname cikle ir isvedineja tik 
>> pirmajaja eilute
>> jei fetch'inu nefunkcijoje, o darydamas while, tuomet gaunu tik viena 
>> masyvo eilute.
>>
>> Taip sakant abiem atvejais as nebegaunu dvimacio masyvo, o tik vienmati.
>> Kaip taisyklingai grazinti daugiamati masyva is funkcijos?
>>
>>