2010-09-21 12 views
1

但是,讓人困惑的標題讓我解釋一下。我有鏈接像這樣的數組:從鏈接數組中篩選出最大整數

http://somesite.com/videoplayback?ip=81.0.0.0&sparams=id,expire,ip,ipbits,itag,algorithm,burst,factor&fexp=905602&algorithm=throttle-factor&itag=34&ipbits=8&burst=40&sver=3&expire=1285056000&key=yt1&signature=690F9475D5288F3129F84364427B2B490B6ACE59.45C8F83DEE3DD361855B12AE538EA6349FF8EF9B&factor=1.25&id=d50e6528eb51ad54,18 

http://somesite.com/videoplayback?ip=81.0.0.0&sparams=id,expire,ip,ipbits,itag,algorithm,burst,factor&fexp=905602&algorithm=throttle-factor&itag=18&ipbits=8&burst=40&sver=3&expire=1285056000&key=yt1&signature=A68EAA3F7A2ECA2BB2BD6C35BF443C03E4BB1172.AD2FF9FDAF046B23F789FE1A7F7882DF9A355DE4&factor=1.25&id=d50e6528eb51ad54,5 

http://somesite.com/videoplayback?ip=81.0.0.0&sparams=id,expire,ip,ipbits,itag,algorithm,burst,factor&fexp=905602&algorithm=throttle-factor&itag=5&ipbits=8&burst=40&sver=3&expire=1285056000&key=yt1&signature=ABC8ACF6899C46CC992ECB5F6A6FD7E66383EA3D.0C8B707083203DC1153FB26586A94BFAC64D176B&factor=1.25&id=d50e6528eb51ad54 

如果你看一下那些網址的結尾處,他們能有像,18,5擴展和有沒有擴展名像這樣在所有的最後一個環節。

現在,我需要在代碼後面儘可能使用結尾數最多的鏈接。在這個例子中,我需要過濾掉第一個鏈接,因爲它在結尾處有最高的整數(18)。

我會使用一系列if()塊,但在這種情況下,最終的整數可能會發生變化,因此這不是一個好的解決方案。

因此,我基本上需要通過我的數組,檢查哪個鏈接在最後有最高整數(請注意,它只有2位長度),然後將其存儲在另一個變量中。

任何人都可以提供一些示例/ psudo代碼如何有效地做到這一點?

乾杯。

+1

媽的,如果它是不是「能有什麼',我們可以使用一個überevil'max(array_map('intval',array_map('strrev',array_map('intval',array_map('strrev',$ array))));' – Wrikken 2010-09-21 01:22:38

+0

哈哈,這是一個地獄一行... – Will 2010-09-21 01:36:45

回答

1

這會工作,即使有在URL其他地方逗號:

$links = array("http://somesite.com/videoplayback?ip=81.0.0.0&sparams=id,expire,ip,ipbits,itag,algorithm,burst,factor&fexp=905602&algorithm=throttle-factor&itag=34&ipbits=8&burst=40&sver=3&expire=1285056000&key=yt1&signature=690F9475D5288F3129F84364427B2B490B6ACE59.45C8F83DEE3DD361855B12AE538EA6349FF8EF9B&factor=1.25&id=d50e6528eb51ad54,18", "http://somesite.com/videoplayback?ip=81.0.0.0&sparams=id,expire,ip,ipbits,itag,algorithm,burst,factor&fexp=905602&algorithm=throttle-factor&itag=18&ipbits=8&burst=40&sver=3&expire=1285056000&key=yt1&signature=A68EAA3F7A2ECA2BB2BD6C35BF443C03E4BB1172.AD2FF9FDAF046B23F789FE1A7F7882DF9A355DE4&factor=1.25&id=d50e6528eb51ad54,5", "http://somesite.com/videoplayback?ip=81.0.0.0&sparams=id,expire,ip,ipbits,itag,algorithm,burst,factor&fexp=905602&algorithm=throttle-factor&itag=5&ipbits=8&burst=40&sver=3&expire=1285056000&key=yt1&signature=ABC8ACF6899C46CC992ECB5F6A6FD7E66383EA3D.0C8B707083203DC1153FB26586A94BFAC64D176B&factor=1.25&id=d50e6528eb51ad54"); 

$max = 0; 
$highestLink = ""; 
foreach ($links as $link) { 
    $data = explode(",", strrev($link)); 
    $val = strrev($data[0]); 
    if (is_numeric($val)) { 
     $val = (int) $val; 
     if ($val > $max) { 
      $max = $val; 
      $highestLink = $link; 
     } 
    } 
} 

echo $max; 
+0

這不會把任何東西放在'$ highestLink'中,我會在一秒鐘內查看它:)謝謝。 PS:'if()'語句中的'!!'是什麼意思?如果它不是不是多餘的?謝謝。 – Will 2010-09-21 01:34:34

+0

它通過以下幾行代碼完成:'if($ val> $ max){... $ highestLink = $ link;'儘管我更改了代碼(請參閱編輯),但我錯誤地使用了'!!'。我的意思是說'strstr(「,」,$ line)=== false'。你不能僅僅使用'==',因爲如果在位置0處找到','0,'0 == false',那麼條件將被錯誤地觸發。 '==='確保值爲'false'而不是'0'。 – 2010-09-21 01:40:46

0

對於混淆獎:

array_multisort(
    array_map('intval',preg_replace('/^.*?(,([0-9]+))?$/','$2',$array)), 
    $array); 
echo end($array); 
+1

是的,但multisort是通過引用,所以'max(boolean true)'=>'true'會失敗。而OP不想'max',他想要'具有特定條件的網址max'_ – Wrikken 2010-09-21 09:13:28