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? >> >>