2016-12-26 47 views
0

部分字符串我有一個AJAX請求此陣:發現裏面陣列

array (
    [0] => 'lat,[email protected]_1' 
    [1] => 'lat,[email protected]_2' 
    [2] => 'lat,[email protected]_3' 
) 

這裏的問題是我不會總是那樣的「正確排序」陣列,所以它可能看起來像這一個:

array (
    [0] => 'lat,[email protected]_1' 
    [1] => 'lat,[email protected]_2' 
    [2] => 'lat,[email protected]_3' 
    [3] => 'lat,[email protected]_1' 
    [4] => 'lat,[email protected]_3' 
    [5] => 'lat,[email protected]_2' 
) 

我需要讓每一個id_X(目前只有3 IDS)的最後一個數組值:

array (
    [3] => 'lat,[email protected]_1' 
    [4] => 'lat,[email protected]_3' 
    [5] => 'lat,[email protected]_2' 
) 

如何根據部分字符串(id_X)找到該數組的每個最後一個值?

+0

你需要索引在結果中是「3」,「4」還是「5」? – Barmar

+1

使用'explode()'將字符串拆分成'@'。然後創建一個關鍵字爲'id_X'的關聯數組。每個'id_X'只會有一個條目。 – Barmar

+0

@barmar不,只是值是好的。 –

回答

1

首先進行反向排序以確保首先解析最新值。然後通過循環運行它們,匹配部分字符串以獲取ID,如果ID索引尚不存在,則將數據添加到數組中。最後的值將被添加到您的數組中,其他值將被忽略。事情是這樣的:

rsort($ajaxy); 

$lasts = []; 

foreach($ajaxy as $str) { 
    $id = substr($str, strrpos($str, '@') + 1); 
    if (!isset($lasts[$id])) { 
     $lasts[$id] = $str; 
    } 
} 

var_dump($lasts); 

如果你有一個巨大的數組,你知道你會得到ID的數量,你可以在一個檢查添加終止循環時,所有需要的ID已經被添加的,以避免冗餘處理。否則,不要打擾反向排序,只是保持覆蓋以前的值直到結束,但我覺得這是一個更乾淨的方法。^_^

+0

我不知道ID的數量。您的代碼按預期工作100%。非常感謝你! –

+0

我其實並沒有打擾測試,因爲你的數組不是可複製粘貼的格式,而且我在午夜時間以後很懶。快活好,它按預期工作,不客氣。 :) –

+0

哈哈哈沒問題,完全工作。再次感謝Markus! –