Permalänk
Medlem

functions & array i php

Hallå.

håller på att lära mig funktioner och arrays i php ordentligt nu, men det verkar som om jag fastnat ganska tidigt.

har följande kod

function printCat() { $catQ = mysql_query("select * from fo_cat") or die(mysql_error()); while($catA = mysql_fetch_assoc($catQ)) { $cat[0] = $catA['id']; $cat[1] = $catA['cat_name']; $cat[2] = $catA['disp_pos']; return $cat; }

och sen ska jag använda innehållet i arrayn (som jag hoppas jag skapat rätt)..hur gör jag då.
skriver jag

echo printCat()

så blir svaret endast "array"

Visa signatur

Jag hatar att vara förkyld!

Permalänk

Man kan inte printa ut en hel array på det där viset, du måste köra en foreach slinga eller liknande för att få ut alla värdena ur arrayen
=EDIT=
php.net@foreach()

Visa signatur

Asus Maximus II formula, E8400 @ 3.9GHz, 4GB Dominator DDR2, Radeon HD4850.

Permalänk
Medlem

okej.... hur gör jag det?

hmmhmm.. kanske löste det

foreach (printCat() as $value) { echo "Value: $value<br />\n"; }

får iaf ut alla tre värdena

Visa signatur

Jag hatar att vara förkyld!

Permalänk
Medlem

$arr = printCat(); foreach($arr as $value) { echo $value; }

Din funktion kommer bara returnera de sista värdena som matas in i arrayn. Du måste ha någon form av räknare i $cat[]. Så den första blir $cat[$n] och den andra $cat[$n+1] och den tredje $cat[$n+2]. Sen i while satsen har du någonstans $n++ så att den ökar med ett varje varv. Då blir hela arrayn fylld.

Du kan också gör såhär. $cat['id' . $n] $cat['cat_name'+$n] $cat['...' . $n]

Hoppas jag var till ngn nytta..

Permalänk
Medlem

Jag förstår vart du vill komma, men inte riktigt hur jag ska lösa det.

jag har gjort såhär nu, och det fungerar uppenbarligen inte

function printCat() { $n = 0; $catQ = mysql_query("select * from fo_cat") or die(mysql_error()); while($catA = mysql_fetch_assoc($catQ)) { $cat[0 + $n] = $catA['id']; $cat[1 + $n] = $catA['cat_name']; $cat[2 + $n] = $catA['disp_pos']; $n = $n + 3; return $cat; } } foreach (printCat() as $value) { echo "Value: $value<br />\n"; }

Visa signatur

Jag hatar att vara förkyld!

Permalänk
Medlem

Pröva det andra alternativet typ såhär:

function printCat() { $n = 0; $catQ = mysql_query("select * from fo_cat") or die(mysql_error()); while($catA = mysql_fetch_assoc($catQ)) { $cat['id_' + $n] = $catA['id']; $cat['cat_name_' + $n] = $catA['cat_name']; $cat['disp_pos_' + $n] = $catA['disp_pos']; $n++; return $cat; } } print_r(printCat()); //skriver ut arrayn utan foreach.. Endast i testsyfte för att se vad Arrayn innehåller.

Permalänk
Medlem

Eller så kan du använda print_r.

Visa signatur

:€

Permalänk
Medlem

din kod ger mig följande svar

Array ( [0] => 1 )

Visa signatur

Jag hatar att vara förkyld!

Permalänk
Medlem

Felsök genom att köra echo efter varje varv i whlie()-satsen.

EDIT: Haha, ska ju vara . [punkt] mellan 'id' och $n..

Permalänk
Medlem

okej, nu har jag följande

$n = 0; $catQ = mysql_query("select * from fo_cat") or die(mysql_error()); while($catA = mysql_fetch_assoc($catQ)) { $cat['id_' + $n] = $catA['id']; $cat['cat_name_' + $n] = $catA['cat_name']; $cat['disp_pos_' + $n] = $catA['disp_pos']; $n++; echo $cat; }

mitt resultat blir..

arrayarrayarray

edit: testa koden utanför funktionen nu

Visa signatur

Jag hatar att vara förkyld!

Permalänk
Medlem

Du lägger samman $cat['id_'] och $n fel. Ska vara $cat['id_' . $n].

Punkt istället för +.

Permalänk
Medlem

okej, nu, jag får fortfarende bara arrayarrayarray

det måste ju vara fel när jag skriver ut arrayn, eller?

function printCat() { $n = 0; $catQ = mysql_query("select * from fo_cat") or die(mysql_error()); while($catA = mysql_fetch_assoc($catQ)) { $cat['id_' . $n] = $catA['id']; $cat['cat_name_' . $n] = $catA['cat_name']; $cat['disp_pos_' . $n] = $catA['disp_pos']; $n++; return $cat; } } $arr = printCat(); foreach($arr as $value) { echo $value; }

Visa signatur

Jag hatar att vara förkyld!

Permalänk
Medlem

function printCat() { $n = 0; $catQ = mysql_query("select * from fo_cat") or die(mysql_error()); while($catA = mysql_fetch_assoc($catQ)) { $cat['id_' . $n] = $catA['id']; $cat['cat_name_' . $n] = $catA['cat_name']; $cat['disp_pos_' . $n] = $catA['disp_pos']; $n++; return $cat; } } $arr = printCat(); foreach($arr as $value) { echo $value; //echo mot print_r? vad händer? }

Permalänk
Medlem

$arr = printCat(); foreach($arr as $value) { print_r$value; } //print_r ger samma som echo // echo ger följande resultat $arr = printCat(); foreach($arr as $value) { echo $value; } 1test1 //detta stämmer med första posten i tabellen

edit_ glömde () runt variebeln efter print_r..ändrat

suckar..

fixade det nu, det är ju klart att return måste ligga utanför whilelopen!!!!

edit2: vilken skall man använda echo eller print_r när man printar ut från arrayer..

och skillnaden på echo och print?

EDIT IGEN!!

nu får jag ut alla värdena, om jag nu vill printa ut dem var för sig, typ... massa text "värde1" blah blah blah "värde2" osv. hur gör jag det?

Visa signatur

Jag hatar att vara förkyld!

Permalänk
Medlem

What is the difference between echo and print?

irrelevant which one you use. print() behaves like a function in that you can do: $ret = print "Hello World";And $ret will be 1That means that print can be used as part of a more complex expression where echo cannot. print is also part of the precedence table which it needs to be if it is to be used within a complex expression. It is just about at the bottom of the precendence list though. Only "," AND, OR and XOR are lower.echo is marginally faster since it doesn't set a return value if you really want to get down to the nitty gritty.If the grammar is: echo expression [, expression[, expression] ... ]Then echo ( expression, expression ) is not valid. ( expression ) reduces to just an expression so this would be valid: echo ("howdy"),("partner");but you would simply write this as: echo "howdy","partner"; if you wanted to use two expression. Putting the brackets in there serves no purpose since there is no operator precendence issue with a single expression like that.

Om du nu ska använda print/echo eller print_r för att skriva ut arrayer är helt upp till dig, om du endast behöver innehållet i en array så funkar print_r, men om du behöver mera kontroll så kan du andända echo/print.
html-taggen <pre> kan även vara bra att kolla upp när du ska använda print_r.

edit:

$a = array("sdf", "afasf"); echo $a[0]; # sdf

Permalänk
Medlem

okej, jag ska läsa på mer där. tackar och bockar.

Fråga;

Nu ser all min kod ut enligt följande

// först funktionen function printCat() { $n = 0; $catQ = mysql_query("select * from fo_cat") or die(mysql_error()); while($catA = mysql_fetch_assoc($catQ)) { $cat['id_' . $n] = $catA['id']; $cat['cat_name_' . $n] = $catA['cat_name']; $cat['disp_pos_' . $n] = $catA['disp_pos']; $n++; } return $cat; } //och sedan det andra $arr = printCat(); foreach($arr as $value) { echo $value. "<br />"; }

tabellstruktur

id || namn || position
1 test 1
2 nationellt 2
3 internationellt 3
det jag får nu är följande

1 test 1 2 Nationellt 2 3 Internationellt 3

jag skulle hällre vilja kunna nytja datan i en tabell eller liknande
typ <tr><td>"id på första raden"</td><td> "namnet på första raden"</td><td> "position på första raden"</td></tr>osv osv

hur skall jag göra för att få ut det så?

Visa signatur

Jag hatar att vara förkyld!

Permalänk
Medlem

Jag skulle lösa det hela enligt följande:

function printCat() { $result = mysql_query("SELECT * FROM fo_cat") or die(mysql_error()); while($cur_cat = mysql_fetch_assoc($result)) { $cat[] = $cur_cat; } return $cat; } $arr = printCat(); echo "<table>\n"; foreach($arr as $value) { echo "<tr>\n"; echo "<td>Id: {$value['id']}</td>\n"; echo "<td>Name: {$value['cat_name']}</td>\n"; echo "<td>Pos: {$value['disp_pos']}</td>\n"; echo "</tr>\n"; } echo "</table>\n";

Inte testkört men jag tror det funkar.

Det som skiljer är främst strukturen på $cat-arrayen. Testa kör print_r($arr); så ser du hur det blir. När man skriver $array[] = 'hej hopp'; så tilldelas ett numeriskt index i arrayen automatiskt till 'hej hopp' (det som du tidigare angav med $array['foo_'.$n] = 'hej hopp';

Visa signatur
Permalänk
Medlem

Tack, du är min räddare idag.

Visa signatur

Jag hatar att vara förkyld!