台灣最大程式設計社群網站
線上人數
1807
 
會員總數:241166
討論主題:186825
歡迎您免費加入會員
討論區列表 >> PHP >> 陣列計算問題
[ 變換順序 ]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
陣列計算問題
價值 : 5 QP  點閱數:78 回應數:3

樓主

Jerry LI
門外漢
0 1
6 1
發送站內信

想請教一下大家,下面是我的a.php檔的內容

<?php
$id=$_GET['id'];
$num = file("temp.txt");
$filename = ("temp.txt");

echo '這是原始陣列資料<br>';
print_r(file("temp.txt"));
echo '<br><br><br>';


$fd = fopen($filename, "w");
for($i = 0; $i < count($num); $i++)
{

if($i==$id)
{

$num[$i]++;
echo '這是IF裡面運算後的陣列資料【';echo ($num[$i]);echo '】<br>';

}

fwrite($fd, $num[$i]);
echo '<br>';echo '<br>';

}

fclose($fd);

echo '<br>';echo '<br>';
echo '這是處理後的陣列資料<br>';
print_r($num);
echo '<br>';

?>




文字檔的內容是
111
222
333





當http://localhost/temp/a.php?id=0
---------------------------------------------
這是原始陣列資料
Array ( [0] => 111 [1] => 222 [2] => 333 )

這是IF裡面運算後的陣列資料【111 】


這是處理後的陣列資料
Array ( [0] => 111 [1] => 222 [2] => 333 )
---------------------------------------------
上面是執行結果$num[0]沒辦法做計算





當http://localhost/temp/a.php?id=1
---------------------------------------------
這是原始陣列資料
Array ( [0] => 111 [1] => 222 [2] => 333 )

這是IF裡面運算後的陣列資料【222 】


這是處理後的陣列資料
Array ( [0] => 111 [1] => 222 [2] => 333 )
---------------------------------------------
上面是執行結果$num[1]沒辦法做計算




當http://localhost/temp/a.php?id=2
---------------------------------------------
這是原始陣列資料
Array ( [0] => 111 [1] => 222 [2] => 333 )

這是IF裡面運算後的陣列資料【334 】


這是處理後的陣列資料
Array ( [0] => 111 [1] => 222 [2] => 334 )
---------------------------------------------
上面是執行結果$num[2]可以做計算

試著增加txt檔裡面的行數,發現只要是陣列的最後一筆都可以正常計算但前面的都不行
不知道是什麼原因,php新手希望有人可以幫助我,感恩

搜尋相關Tags的文章: [ 陣列計算問題 ] ,
本篇文章發表於2017-11-09 14:19
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
回應

浩瀚星空
捐贈 VP 給 浩瀚星空 檢舉此回應
先說明在此幾件事

1.請善用程式標簽來排版你的程式碼,這樣子放程式碼很難閱讀的。

你使用file函數來一行一行取出。但你沒考量到換行符號的問題
而且你的程式其實根本不需要用for來跑

將程式碼改成如下看看吧

另外,你要注意一件事,一般來說檔案讀寫動作要特別小心同步處理的問題。
大多數而言,我會去判斷檔案是否有成功打開。
因為如果沒成功打開的話,就無法寫入進去。

再來就是fwrite的動作跟fopen的動作。盡量在最後才去處理。
這是為了防止同時多人時發生搶開的問題。
本篇文章回覆於2017-11-09 14:39
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

Jerry LI
檢舉此回應
謝謝版主~我測示了一下結果
在多次執行的時後會產生空的陣列內容
後來我改寫了我的程式碼後就可以了

我這個程式主要就是用一個txt檔來統計
我網站裡面的超連結被點擊的次數
每個超連結後面給參考?id=??

到這個地方學習到很多東西~謝謝每一位大大無私的付出~感恩
謝謝版主的提醒
之後會在加上鎖檔開檔的部份
萬分感激




本篇文章回覆於2017-11-09 16:58
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

浩瀚星空
捐贈 VP 給 浩瀚星空 檢舉此回應
不過看你還是用for來做處理說~~~

照理說依照你的需求。因該只改其中一個值吧。
實在是沒必要跑for才對。

不過這就看你了。

一般多重計數,我還是會偏向用db計數。
如果不能用db的話。大多數我也會存成json。
這樣子在讀取寫入上就可以用file_get_contents() file_put_contents()處理
雖然這樣子也比較容易發生漏掉的問題就是了
本篇文章回覆於2017-11-09 18:35
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
[ 變換順序 ]   
1

回覆
如要回應,請先登入.