2013-02-26 103 views
-1

是否有可能在php中的某個特定索引之後找到數組中的元素,任何幫助將不勝感激!通過手動索引從數組中搜索元素

+0

你能提供你所做的任何代碼嘗試嗎?也許澄清這個問題好一點? – christopher 2013-02-26 13:57:34

+1

在提問時試着更具體。 – 2013-02-26 13:57:35

+0

我很抱歉有任何問題,我是新來的堆棧溢出,我會盡快改進它。 – 2013-02-27 06:40:11

回答

0

你的問題相當模糊,所以答案取決於你的數據結構。如果你有一個普通的,索引陣列連續按鍵,你可以搜索你的數組的一個切片:

function array_search_from($needle, $haystack, $index_from) 
{ 
    $array_to_search = array_slice($haystack, $index_from); 

    $index = array_search($needle, $array_to_search); 

    if ($index === false) 
    { 
     return $index; 
    } 

    return $index + $index_from; 
} 

..或者你可以實現它作爲一個經常性的循環,以避免創建切片:

function array_search_from($needle, $haystack, $index_from) 
{ 
    $len = count($haystack); 

    for ($i = $index_from; $i < $len; $i++) 
    { 
     if ($haystack[$i] == $needle) 
     { 
      return $i; 
     } 
    } 

    return false; 
} 

要測試它按預期工作:

$array = array("one", "two", "three", "four", "one", "two"); 

var_dump(array_search_from("one", $array, 0)); 
var_dump(array_search_from("one", $array, 1)); 
var_dump(array_search_from("two", $array, 2)); 

int(0) 
int(4) 
int(5) 

然後,您可以擴大到這個array_search_slice,而且可能添加好一點錯誤檢查(如array_search返回NULL如果無效參數的重新提供)。

爲了好玩,因爲PHP關聯數組也是序列,你也可以做同樣的關聯數組:

function array_search_from($needle, $haystack, $from) 
{ 
    $searching = false; 

    foreach ($haystack as $key => $value) 
    { 
     if ($key == $from) 
     { 
      $searching = true; 
     } 

     if ($searching && ($needle == $value)) 
     { 
      return $key; 
     } 
    } 

    return false; 
} 

..和測試他們:在

$array = array("one" => "foo", "two" => "bar", "three" => "baz", "four" => "woo", "five" => "foo", "six" => "bar"); 

var_dump(array_search_from("foo", $array, "one")); 
var_dump(array_search_from("foo", $array, "two")); 
var_dump(array_search_from("bar", $array, "three"));  

..結果:

string(3) "one" 
string(4) "five" 
string(3) "six" 

..這可能不是那麼有用,但可以完成。因此,它已經完成。

+0

fiskfisk你是救命的人,處理你的代碼真棒! – 2013-02-27 06:41:00