[請益] 請問我php程式那裏出錯了(用array_keys)

看板PHP作者 (孚爸)時間16年前 (2009/10/17 20:42), 編輯推噓11(11032)
留言43則, 4人參與, 最新討論串1/1
我想要用array_keys指令來找到我要搜尋xls中的只要有 OTA LOG RR/DCCH DL/Handover Command 00:55:14.921 Length: 0014 的文字的都找到其位置 並回報出每一個出現的位置 以下是我用書中範例array_keys正確的程式 ************************************* <? $a = array('this','is','a','book','is','pp','is'); $p = array_keys($a , 'is'); $count=count($p); for ($k=0 ; $k <= ($count-1) ; $k++) {//$p[0]=1(即是第1次出現is的位置是陣列中 的"1"的位置,) echo'$p['."$k".']='."$p[$k]"."<p>"; } ?> ************************************* 可顯示出 $p[0]=1 $p[1]=4 $p[2]=6 ************************************* 但當我要將之套用在另一個模式中時卻出現不是我要的答案 我想要用array_keys指令來找到我要搜尋xls中的只要 有 OTA LOG RR/DCCH DL/Handover Command 00:55:14.921 Length: 0014 文字都找到 其位置,並將每一個位置傳回至陣列中 以下是我用書中範例array_keys正確的程式 ************************************* <? $a = array('this','is','a','book','is','pp','is'); $p = array_keys($a , 'is'); $count=count($p); for ($k=0 ; $k <= ($count-1) ; $k++) {//$p[0]=1(即是第1次出現is的位置是陣列中 的"1"的位置,) echo'$p['."$k".']='."$p[$k]"."<p>"; } ?> ************************************* 可顯示出 $p[0]=1 $p[1]=4 $p[2]=6 ************************************* 但當我要將之套用在另一個模式中時卻出現不是我要的答案 ************************************* <?php $datpath = '1.txt'; $lines=file($datpath); //開啟'1.xls'檔案,並將內容全部讀到陣列中 $count=count($lines); //計算陣列元素(幾筆資料) $keys = 'chan_type = 0 (0x0)'; //我要找資料中的'chan_type = 0 (0x0)'位置出來 $p = array_keys($lines , $keys ); print_r($p);//我試著秀出所有$p的值 echo"<p>"; print_r($lines);//秀出所有$lines的值 ?> 卻變成 ************************************************************** Array ( ) Array ( [0] => LOG GSM L1 TxLev/Timing Advance 00:38:03.854 Length: 0004 [1] => ARFCN = 651 [2] => Band = DCS [3] => TX Power Level = 0 [4] => Timing Advance = 0 [5] => LOG GSM L1 TxLev/Timing Advance 00:38:04.324 Length: 0004 [6] => ARFCN = 651 [7] => Band = DCS [8] => TX Power Level = 0 [9] => Timing Advance = 0 [10] => LOG GSM L1 TxLev/Timing Advance 00:38:04.795 Length: 0004 [11] => ARFCN = 651 [12] => Band = DCS [13] => TX Power Level = 0 [14] => Timing Advance = 0 [15] => LOG GSM L1 TxLev/Timing Advance 00:38:05.266 Length: 0004 [16] => ARFCN = 651 [17] => Band = DCS [18] => TX Power Level = 1 [19] => Timing Advance = 0 [20] => LOG GSM L1 TxLev/Timing Advance 00:38:05.737 Length: 0004 [21] => ARFCN = 651 [22] => Band = DCS [23] => TX Power Level = 1 [24] => Timing Advance = 0 [25] => LOG GSM L1 TxLev/Timing Advance 00:38:06.207 Length: 0004 [26] => ARFCN = 651 [27] => Band = DCS [28] => TX Power Level = 1 [29] => Timing Advance = 0 [30] => LOG GSM L1 TxLev/Timing Advance 00:38:06.678 Length: 0004 {中間太多資料..故跳過} [542] => Band = DCS [543] => TX Power Level = 0 [544] => Timing Advance = 1 [545] => OTA LOG RR/DCCH DL/Handover Command 00:38:56.295 Length: 0012 [546] => chan_type = 0 (0x0) ************************************ 上面的Array( )應該會秀出 第546 是我要所找的資料位置 但為何是空的呢? 我該如何改寫呢?! 有誰能教教我... -- 阿孚的DIY.手作木工.拼布作品的天地 http://blog.udn.com/ying65176517 http://tw.myblog.yahoo.com/ying65176517-ying65176517/ http://blog.yam.com/ying65176517 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.229.82.148

10/17 21:05, , 1F
拜託拜託..這對小弟很重要..幫我解決此問題的大大
10/17 21:05, 1F

10/17 21:05, , 2F
我會送他200元的金幣(但要給我id)
10/17 21:05, 2F

10/17 21:06, , 3F
那如果直接打$p = array_keys($lines ,'chan_type = 0')勒
10/17 21:06, 3F

10/17 21:07, , 4F
我不是看到有錢才推的..... = =
10/17 21:07, 4F

10/17 21:07, , 5F
小弟我真的是找不到人請教了..拜託大大們..
10/17 21:07, 5F

10/17 21:09, , 6F
這我有試過了..還是一樣..找不到東西..
10/17 21:09, 6F

10/17 21:10, , 7F
而且,我也有試著在1.txt檔最後1欄加上數字1,然後,再
10/17 21:10, 7F

10/17 21:11, , 8F
$keys改成$keys = 1;結果,Array ( [0] => 11808 )
10/17 21:11, 8F

10/17 21:12, , 9F
代表這程式是找得到資料位置..但換成英文字.就不行
10/17 21:12, 9F

10/17 21:21, , 10F
把你的檔案丟上來看看
10/17 21:21, 10F

10/17 21:25, , 11F
我記得file()出來的東西換行符號還在
10/17 21:25, 11F

10/17 21:27, , 12F
檔案我壓縮成rar
10/17 21:27, 12F

10/17 21:27, , 13F
www.hec.hfu.edu.tw/phpExcelReader/test.rar
10/17 21:27, 13F

10/17 21:28, , 14F
$line先trim過一遍或換行符號寫進$keys裡面
10/17 21:28, 14F

10/17 21:28, , 15F
蛋換行符號可能是\n或\r\n
10/17 21:28, 15F

10/17 21:51, , 16F
果然是換行的問題 $key = "chan_type = 0 (0x0)\r\n";
10/17 21:51, 16F

10/17 21:51, , 17F
喔 對了 不用給我P幣,那不能吃XD
10/17 21:51, 17F

10/17 21:55, , 18F
捐100台幣給隨便一個基金會比較實在
10/17 21:55, 18F

10/17 21:56, , 19F
不過如果$line要全部跑一遍的話,不如就直接尋找了吧XD
10/17 21:56, 19F

10/17 21:57, , 20F
雖然有過濾函數可以整批處理
10/17 21:57, 20F

10/17 21:59, , 21F
line=[x.strip() for x in f.readlines()] python用法XD
10/17 21:59, 21F

10/17 21:59, , 22F
php應該有array_map可以用
10/17 21:59, 22F

10/17 22:03, , 23F
感謝 兩位大大 的幫忙.. 可否再問個追加的問題.
10/17 22:03, 23F

10/17 22:06, , 24F
若我要找的是 OTA LOG RR/DCCH DL/Handover 位置呢?
10/17 22:06, 24F

10/17 22:06, , 25F
不行喔 他只能exact match
10/17 22:06, 25F

10/17 22:07, , 26F
但是,那一欄的資料後面還會有其他數字跟在後面
10/17 22:07, 26F

10/17 22:07, , 27F
如果是我 檔案不太大的話 我會整個檔案用strpos找
10/17 22:07, 27F

10/17 22:07, , 28F
找到再數前面有幾個\n
10/17 22:07, 28F

10/17 22:08, , 29F
用substr_count數
10/17 22:08, 29F

10/17 22:10, , 30F
$s=file_get_contents('1.txt');
10/17 22:10, 30F

10/17 22:11, , 31F
$line=substr_count($s,"\n",0,strpos($s,$key))+1;
10/17 22:11, 31F

10/17 22:11, , 32F
strpos(string1,string2)不是 搜尋string1裡第1次出
10/17 22:11, 32F

10/17 22:12, , 33F
所以你可以用迴圈繼續下去啊....
10/17 22:12, 33F

10/17 22:13, , 34F
或者用迴圈去跑$line 一個一個用strpos跑 line col都可以
10/17 22:13, 34F

10/17 22:13, , 35F
查的出來
10/17 22:13, 35F

10/17 22:14, , 36F
後面這個方法應該比較好
10/17 22:14, 36F

10/17 22:15, , 37F
我是新手,我會再test看看的..若有問題再上來向各位
10/17 22:15, 37F

10/17 22:17, , 38F
高手請教..太高興了,為表示謝意..buganini及arrack
10/17 22:17, 38F

10/17 22:18, , 39F
兩位我都會給200元.還有.小弟我都有在捐款的..感恩
10/17 22:18, 39F

10/17 22:23, , 40F
兩位大大我已給啦.請收一下..竟然還要扣稅也...
10/17 22:23, 40F

10/17 22:28, , 41F
互相討論,增加知識而已,板上神人很多
10/17 22:28, 41F

10/17 22:29, , 42F
php 的確有array_map之類的function可以用沒錯,不過沒比
10/17 22:29, 42F

10/17 22:29, , 43F
迴圈來得直觀...(偷懶)
10/17 22:29, 43F
文章代碼(AID): #1AsRl7ak (PHP)
文章代碼(AID): #1AsRl7ak (PHP)