2013-03-15 27 views
5

làm cách nào để đếm nhiều hàng trong vòng lặp for có mảng? khi hàng mới được nhập vào cơ sở dữ liệu mysql cho vòng lặp đếm hàng mới là 0 khi hai hàng mới được nhập vào cơ sở dữ liệu mysql cho vòng lặp đếm cả hai hàng là 1 ?? tôi không biết tại sao for loop escape first row count start from second row? Và cũng làm thế nào để tôi làm cho nhiều hàng phiên với mảng ??làm thế nào để tôi đếm nhiều hàng trong vòng lặp for với mảng?

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; 
} 

Trang Function Nơi tôi đang kêu gọi $ 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']; 
} 

Bây giờ tôi đang sử dụng chức năng này ngay bây giờ chức năng này không vang hoặc giá trị count in 0 không hiển thị nhưng giá trị đang hiển thị sau khi đếm 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']; 
} 

Trả lời

0

Hãy thử điều này:

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

$i>0 Thay đổi để $i=0

Có một không gian trong $wid [$i] tôi thay đổi nó để $wid[$i]

0

sử dụng foreach trừ

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

vẫn còn để thoát vòng lặp bắt đầu đếm hàng đầu tiên từ hàng thứ hai –

+0

sử dụng 'var_export ($ wids)' để xem toàn bộ thông tin mảng. có lẽ vấn đề phụ thuộc vào thông tin cơ sở dữ liệu – Alireza41

0

Kiểm tra có khai báo biến $ i bên ngoài hay không

$wid=get_wid($id); 

$max1= count($wid); 

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

{ 

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

$_SESSION['wid2']=$wid1; 

echo $_SESSION['wid2']; 

} 
+0

vẫn còn cho việc thoát vòng lặp hàng đầu tiên bắt đầu từ hàng thứ hai –

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']; 
} 

truy vấn trả về 3 hồ sơ nghĩa bây giờ,

$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'; 

và trả về tất cả các values.and nếu bạn cần số lượng $ _SESSION ['wid2']

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

count => 3

+0

để thoát vòng lặp đầu tiên bắt đầu từ hàng thứ hai –

+0

tôi đã sử dụng hàm của bạn $ wid = get_wid ($ id); $ max1 = count ($ wid); cho ($ i = 0; $ i <$ max1; $ i ++) // thay đổi được thực hiện tại đây { $ wid1 = $ wid [$ i]. '
'; $ _SESSION ['wid2'] = $ wid1; echo $ _SESSION ['wid2']; } lý do tại sao giá trị này thoát 0 giá trị? –

+0

cho ($ i = 1; $ i <= $ max1; $ i ++) // thay đổi được thực hiện tại đây { $ wid1 = $ wid [$ i-1]. '
'; $ _SESSION ['wid2'] = $ wid1; echo $ _SESSION ['wid2']; } // bây giờ làm việc của nó xin vui lòng kiểm tra này. – MKV

0

của nó không rõ ràng chính xác những gì bạn đang cố gắng làm ở đây

Hãy thử điều này

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

nó sẽ echo ra 0,1,2,3, ...... ... tối đa 1 số (get_wid ($ id)

cũng có gì trong mảng tại $ wid [0], $ wid [1], $ wid [2]?

mọi thứ ở chỉ mục đó sẽ được lặp lại mỗi lần. hy vọng điều này sẽ hữu ích.

+0

vâng, rất có thể vấn đề được chứa trong cột cơ sở dữ liệu. chỉ cần nhìn vào những gì sắp ra khỏi cột id trong bảng danh sách mong muốn, nơi pid = $ id. – eoin

+0

aah, tôi nghĩ rằng bạn cần phải làm một số hướng dẫn về mảng và cho vòng nó có thể là cách tốt nhất. và sau đó trở lại vấn đề của bạn – eoin

0

Đặt $ i = 0 trong vòng lặp for nó sẽ bắt đầu hiển thị bản ghi trong mảng tại 0

1

Như đã được chỉ ra tại "Trang Chức năng của mình ở đâu Tôi Calling $ Wid = get_wid ($ id) ; ":

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

$ i> 0 nên là $ i = 0

tôi chắc chắn rằng nó chỉ là một lỗi đánh máy nhưng bạn đã thất bại trong việc tuyên bố bắt đầu lặp đi lặp lại đó là lý do nó chỉ bắt đầu xử lý sau lần đầu tiên. Cá nhân tôi sẽ giữ mọi thứ bắt đầu từ 0 như là tiêu chuẩn.

Chỉ cần nhìn qua tôi cũng có thể cho bạn biết rằng mảnh này:

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

sẽ tốt hơn một toàn bộ rất nhiều như:

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

Điều này sẽ giữ nó chặt hơn. Một mẹo "gọn gàng" khác là thêm "_arr" vào tất cả các biến mảng để bạn biết khi nào bạn đang tham chiếu một chuỗi hoặc mảng, ví dụ:

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

Mặc dù tôi không biết chính xác bạn đang cố gắng đạt được điều gì nhưng tôi có thể nói rằng bạn nên sử dụng foreach để lặp lại $ wid. Như đã đề cập khi lặp bắt đầu từ 0 tất cả mọi thứ sẽ dễ dàng hơn vì bạn có thể làm điều này:

$wid=get_wid($id); 

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

Nếu bạn muốn nhận được bất kỳ chỉ số hoặc giá trị cụ thể mà bạn có thể sử dụng những cầu thủ như array_keys, array_search vv Cuối cùng cũng giống như bạn đã làm với chức năng "get_wid" tôi sẽ gọi mã khác từ một hàm. Dưới đây là những gì tôi sẽ làm trong tổng số:

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); 

Tôi sẽ để nó ở đó nhưng không biết tại sao bạn muốn ngắt trang - <br /> - trong phiên của bạn. Bạn biết nếu bạn muốn có một ngắt trang giữa mỗi giá trị mảng bạn có thể xuất nó như thế này:

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

Bằng cách giữ mọi thứ sạch sẽ bạn sẽ defintely tiết kiệm thời gian từ lỗi nhỏ có thể giết chết một người đàn ông _G

0

Chỉ cần thanh toán số này từ mã trước của bạn

$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); 

Tôi muốn đề cập ở đây, trong mã của bạn luôn thay thế phiên trước đó bằng mới. Vì vậy, phiên của bạn luôn hiển thị hàng cuối cùng của dữ liệu mysql của bạn. Hy vọng mã này sẽ giúp bạn.

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

Tôi đoán bạn đang bắt đầu từ hàng thứ hai Đó là lý do nó didnt hiển thị đầu tiên (hàng 0)

thay đổi

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

để

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

có thể khắc phục vấn đề của bạn.

Các vấn đề liên quan