2013-04-05 33 views
-2

我的大腦壞了。這裏的概念:從數組中刪除子項,其中子項是該項的最後一項

$a = array('please', 2); 
$s = array('help', 3); 
$d = array('me', 1); 
$f = array('!', 3); 
$g = array('asdf', 1); 

$myArray = array($a, $s, $d, $f, $g); 

for ($i = 0; $i < count($myArray); $i++) { 
    // code here 
} 

代碼應該從myArray的包含邏輯,其去除索引0,3和4,因爲它們含有其種在位置$ myArray的最後的值(最後2,3和1分別) $ I] [1]。

- 編輯:從意見 改編建議,得到這樣的:

$a = array('please', 2); 
$s = array('help', 3); 
$d = array('me', 1); 
$f = array('!', 3); 
$g = array('asdf', 1); 

$myArray = array($a, $s, $d, $f, $g); 

$used = array(); 

for ($i = 0; $i < count($myArray); $i++) { 
    $used[$myArray[$i][1]] = $i; 
} 

foreach ($used as $deleteMe) 
    unset($myArray[$deleteMe]); 

$newArray = array_values($myArray); 

var_dump($newArray); 

它的工作原理,並建立與array_values一個新的數組消除()使用未設置產生的間隙。

回答

0
$i = count($myArray); 
$used = array(); 
while ($i-- > 0) 
    if (!isset($used[$myArray[$i][1]])) { 
     $used[$myArray[$i][1]] = true; 
     unset($myArray[$i]); 
    } 

這個簡單的片斷第一迭代並刪除索引如果與此數目的條目尚未被刪除。

+0

這不會刪除每種類型的第一個嗎?由於您從最後開始並開始使用,每次使用[bla]中寫入的最後一個索引是第一個。 – STEELHE4RT 2013-04-05 20:59:43

+0

無論哪種方式,謝謝。我能夠將您的代碼調整爲可行的解決方案。 – STEELHE4RT 2013-04-05 21:14:00

+0

沒問題,...我也修正了這裏的代碼;) – bwoebi 2013-04-05 21:16:51

0

通過$myArray進行迭代,在$otherArray中保存各種最後一個位置,循環通過$otherArray$myArray取消刪除項目。就這樣。從後面的陣列上