2013-03-15 8 views
5

Jak zliczyć wiele wierszy w pętli for z tablicą? kiedy nowy wiersz wszedł do bazy danych mysql, aby zliczyć nowy wiersz jako 0, gdy dwa nowe wiersze wprowadzono do bazy danych mysql, aby zliczyć oba wiersze jako 1 ?? Nie wiem dlaczego for loop escape first row count start from second row? A także w jaki sposób zrobić wiele wierszy sesji z tablicy?jak zliczyć wiele wierszy w pętli for z tablicą?

Function.php & MySQL Query

function get_wid($id){ 
    $result=mysql_query("SELECT id AS wid FROM mywishlist where pid='$id'") 
       or die("Id Problem"."<br/><br/>".mysql_error()); 
    $results= array(); 
    while($row=mysql_fetch_array($result)){ 
     $results[] = $row['wid']; 
    } 
    return $results; 
} 

Funkcja Page Gdzie Dzwonię $ wid = get_wid ($ id);

$wid=get_wid($id); 
$max1= count($wid); 
for($i>0; $i<$max1; $i++) 
{ 
    $wid1=$wid [$i].'<br />'; 
    $_SESSION['wid2']=$wid1; 
    echo $_SESSION['wid2']; 
} 

Teraz używam tej funkcji teraz ta funkcja nie echo lub print count 0 wartość nie pokazuje, ale wartości są wyświetlane po liczbie 1?

function get_wid($id){ 
$result=mysql_query("SELECT id AS wid FROM mywishlist where pid='$id'") or die("Id  Problem"."<br/><br/>".mysql_error()); 
$results= array(); 
$i=1; // add the new line 
while($row=mysql_fetch_array($result)){ 
$results[$i] = $row['wid']; 
$i++; 
} 
return $results; 
} 

$wid=get_wid($id); 
$max1= count($wid); 
for($i=1; $i<=$max1; $i++) // changes made here 
{ 
$wid1=$wid [$i].'<br />'; 
$_SESSION['wid2']=$wid1; 
echo $_SESSION['wid2']; 
} 

Odpowiedz

0

Spróbuj tego:

for($i=0; $i<count(get_wid($id)); $i++) 
{ 
    $wid1=$wid[$i].'<br />'; 
    $_SESSION['wid2']=$wid1; 
    echo $_SESSION['wid2']; 
} 

$i>0 Zmieniono $i=0

Nie było miejsca w $wid [$i] i zmienił je na $wid[$i]

0

używanie foreach wyjątkiem

$wids = get_wid($id); 
foreach($wids as $wid) 
{ 
    $wid1=$wid.'<br />'; 
    $_SESSION['wid2']=$wid1; 
    echo $_SESSION['wid2']; 
} 
+0

nadal do ucieczki z pętli Początek pierwszego wiersza od drugiego rzędu –

+0

użyj 'var_export ($ wids)', aby zobaczyć całą informację o tablicy. być może problem zależy od informacji z bazy danych – Alireza41

0

Sprawdź mają zadeklarować zmienną $ i na zewnątrz lub nie

$wid=get_wid($id); 

$max1= count($wid); 

for($i=0; $i<$max1; $i++) 

{ 

$wid1=$wid [$i].'<br />'; 

$_SESSION['wid2']=$wid1; 

echo $_SESSION['wid2']; 

} 
+0

nadal do ucieczki z pętli Początek pierwszego wiersza od drugiego rzędu –

0
function get_wid($id){ 
$result=mysql_query("SELECT id AS wid FROM mywishlist where pid='$id'") or die("Id Problem"."<br/><br/>".mysql_error()); 
$results= array(); 
$i=1; // add the new line 
while($row=mysql_fetch_array($result)){ 
$results[$i] = $row['wid']; 
$i++; 
} 
return $results; 
} 

$wid=get_wid($id); 
$max1= count($wid); 
for($i=1; $i<=$max1; $i++) // changes made here 
{ 
$wid1=$wid [$i-1].'<br />'; 
$_SESSION['wid2'][$i]=$wid1; 
echo $_SESSION['wid2']; 
} 

zapytanie zwraca 3 rekordy oznacza teraz

$results[1]='1'; 
$results[2]='2'; 
$results[3]='3'; 
echo count($wid); 


print_r($_SESSION['wid2']); 
Array ([1] => 1 [2] => 2 [3] => 3) 

$_SESSION['wid2'][1]='1'; 
$_SESSION['wid2'][2]='2'; 
$_SESSION['wid2'][3]='3'; 

i która zwraca całą values.and jeśli potrzeba liczba $ _SESSION ['wid2']

echo count($_SESSION['wid2']); 

count => 3

+0

do ucieczki z pętli Początek pierwszego wiersza od drugiego rzędu –

+0

użyłem twojej funkcji $ wid = get_wid ($ id); $ max1 = count ($ wid); dla ($ i = 0; $ i <$ max1; $ i ++) // wprowadzonych tutaj zmian { $ wid1 = $ wid [$ i]. '
"; $ _SESSION ['wid2'] = $ wid1; echo $ _SESSION ['wid2']; } dlaczego to jest ucieczka 0 wartość? –

+0

dla ($ i = 1; $ i <= $ maks1; $ i ++) // wprowadzonych tutaj zmian { $ wid1 = $ wid [$ i-1]. '
"; $ _SESSION ['wid2'] = $ wid1; echo $ _SESSION ['wid2']; } // teraz działa, sprawdź to. – MKV

0

Jego jasne, co dokładnie chce zrobić tutaj

Spróbuj

for($i=0; $i<count(get_wid($id)); $i++) 
{ 
echo $i; 
} 

będzie echo z 0,1,2,3, ...... ... do 1-krotnego (get_wids ($ id)

również to, co jest w tablicy na $ wid [0], $ wid [1], $ wid [2]?

to, co jest na tym indeksie, będzie wyświetlane za każdym razem. mam nadzieję, że to pomoże.

+0

tak, jest bardzo możliwe, że problem jest zawarty w kolumnie bazy danych. spójrz tylko na to, co wychodzi z kolumny id w tabeli życzeń, gdzie pid = $ id. – eoin

+0

Aah, myślę, że trzeba zrobić kilka samouczków na tablicach i dla pętli może to być najlepszy sposób. a następnie wróć do swojego problemu – eoin

0

Ustaw $ i = 0 w pętli for rozpocznie pokazując rekord w tablicy w 0

1

Jak już wskazano w swojej „Funkcja strony Gdzie Dzwonię $ wid = get_wid ($ id) ; ":

for($i>0; $i<$max1; $i++) 
{ 
    $wid1=$wid [$i].'<br />'; 
    $_SESSION['wid2']=$wid1; 
    echo $_SESSION['wid2']; 
} 

$ i> 0 powinno być $ i = 0

Jestem pewien, że to tylko literówka, ale już nie zadeklarował rozpoczęcia iteracji dlatego jest tylko zaczyna się przetwarzać po pierwszym. Osobiście zachowam wszystko począwszy od 0, co jest standardem.

Wystarczy pominie mogę też powiedzieć, że ten kawałek:

$results=array(); 
$i=1; // add the new line 
while($row=mysql_fetch_array($result)){ 
$results[$i] = $row['wid']; 
$i++; 
} 

byłoby dużo lepiej, jak:

$results=array(); 
while($row=mysql_fetch_array($result)){ 
$results[] = $row['wid']; 
} 

To będzie trzymać go mocniej. Kolejną "schludną" wskazówką jest dodanie "_arr" do wszystkich zmiennych tablicowych, abyś wiedział, kiedy odwołujesz się do łańcucha lub tablicy, np.

while($row=mysql_fetch_array($result)){ 
$results_arr[] = $row['wid']; 
} 

Chociaż nie wiem dokładnie, co chcesz osiągnąć, ale mogę powiedzieć, że powinieneś używać foreach do pętli $ wid. Jak wspomniano, gdy iteracja rozpoczyna się od 0 wszystko jest łatwiejsze, ponieważ można to zrobić:

$wid=get_wid($id); 

foreach($wid as $newWid) // changes made here 
{ 
$_SESSION['wid2']=$newWid.'<br />'; 
echo $_SESSION['wid2']; 
} 

Jeśli chcesz uzyskać wszelkie indeksy lub określonych wartości można użyć gustuje array_keys, array_search, itd. Wreszcie, tak jak ciebie zrobiłem z funkcją "get_wid", nazwałbym drugi kod z funkcji. Oto, co chciałbym robić w sumie:

function get_wid($id){ 
$result=mysql_query("SELECT id AS wid FROM mywishlist where pid='$id'") or die("Id  Problem"."<br/><br/>".mysql_error()); 
$results_arr= array(); 
while($row=mysql_fetch_array($result)){ 
$results_arr[] = $row['wid']; 
} 
return $results_arr; 
} 

function sessionWid($id) { 
$wid_arr=get_wid($id); 
foreach($wid_arr as $wid) // changes made here 
{ 
$_SESSION['wid2']=$wid.'<br />'; 
echo $_SESSION['wid2']; 
} 

// call sessionWid($id) where you want 
sessionWid($id); 

miałem zamiar go zostawić, ale nie wiem dlaczego chcesz podział strony - <br /> - w sesji. Wiesz, jeśli chcesz podział strony między każdej wartości tablicy można wyprowadzać go tak:

echo implode('<br />',get_wid($id)); 

Utrzymując rzeczy czyste będziesz z pewnością zaoszczędzić czas od drobnych błędów, które mogą zabić człowieka _G

0

Po prostu wymień to z poprzedniego kodu:

$wid=get_wid($id); 
$max1= count($wid); 
for($i=0; $i<=$max1; $i++) 
{ 
    $wid1=$wid [$i].'<br />'; 
    $_SESSION['wid'.($i+1)]=$wid1; 
} 

print_r($_SESSION); 

Chciałbym tutaj wspomnieć, w swoim kodzie zawsze zastępujesz poprzednią sesję nową. Tak więc twoja sesja zawsze pokazuje ostatni wiersz danych mysql. Mam nadzieję, że ten kod Ci pomoże.

0
for($i=1; $i<=$max1; $i++) // changes made here 
{ 
$wid1=$wid [$i].'<br />'; 
$_SESSION['wid2']=$wid1; 
echo $_SESSION['wid2']; 
} 

Chyba zaczynasz od drugiego rzędu to dlaczego nie zrobił pokazać pierwsza (wiersz 0)

zmieniającą

for($i=1; $i<=$max1; $i++) 

do

for($i=0; $i<=$max1; $i++) 

może naprawić Twój problem.