2013-07-09 146 views
-1

我有一個包含其他數組(子數組)的數組。我需要獲取包含特定鍵值的子數組的索引。例如。這是我的陣列:Php數組索引

Array 
(
[0] => Array 
    (
     [id] => 353 
     [name] => account_2 
     [ips] => 
     [tech_prefix] => 
     [password] => 
     [id_voip_hosts] => 
     [proxy_mode] => 
     [auth_type] => ani 
     [ani] => 526466 
     [accname] => 
     [protocol] => 
     [port] => 
     [orig_enabled] => 1 
     [term_enabled] => 
     [orig_capacity] => 
     [term_capacity] => 
     [orig_rate_table] => 
     [term_rate_table] => 
     [id_dr_plans] => 
     [orig_groups] => 
     [term_groups] => 
     [notes] => 
    ) 

[1] => Array 
    (
     [id] => 352 
     [name] => account_3 
     [ips] => 
     [tech_prefix] => 
     [password] => 
     [id_voip_hosts] => 
     [proxy_mode] => 
     [auth_type] => ani 
     [ani] => 1345436 
     [accname] => 
     [protocol] => 
     [port] => 
     [orig_enabled] => 1 
     [term_enabled] => 
     [orig_capacity] => 
     [term_capacity] => 
     [orig_rate_table] => 
     [term_rate_table] => 
     [id_dr_plans] => 
     [orig_groups] => 
     [term_groups] => 
     [notes] => 
    ) 

[2] => Array 
    (
     [id] => 354 
     [name] => account_4 
     [ips] => 
     [tech_prefix] => 
     [password] => 
     [id_voip_hosts] => 
     [proxy_mode] => 
     [auth_type] => ani 
     [ani] => 472367427 
     [accname] => 
     [protocol] => 
     [port] => 
     [orig_enabled] => 1 
     [term_enabled] => 
     [orig_capacity] => 
     [term_capacity] => 
     [orig_rate_table] => 
     [term_rate_table] => 
     [id_dr_plans] => 
     [orig_groups] => 
     [term_groups] => 
     [notes] => 
    ) 

) 

我需要什麼。例如,我需要從數組子數組[2]中刪除。我知道unset($ myarray [2])的一種方式,但我怎樣才能得到這個索引[2]。如果我只知道[ani]鍵值472367427.如何在var中獲取這個「[2]」以將其插入到未設置的命令中。 如果我需要刪除有一個密鑰[ani] = 1345436的子數組(它在數組[1]中)。有沒有辦法通過一個鍵的值來搜索數組的索引。 再次,如何通過[ani]鍵在多維數組中找到這個索引[2]或[1]? 謝謝!

+0

以何種方式,你導航到每個[ANI]價值指數和unset元素?通過循環? –

+2

循環和'unset'或'array_filter'。這是非常基本的數組操作的東西,嘗試一些東西。 – deceze

+0

有什麼我們失蹤的?你有什麼嘗試? – jterry

回答

2

我認爲這應該工作(沒有測試 - 但你的想法)

foreach ($arrays as $key => $item) 
{ 
    if ($item['ani'] === '472367427') 
    { 
     unset($arrays[$key]); 
    } 
} 
1
$remove = 472367427; 

foreach($your_array as $key => $values) { 
    if(!empty($values['ani'] && $values['ani'] == $remove) { 
     unset($your_array[$key]); 
    } 
} 
1

如果你已經知道你要找的ANI值:

$yourani = 'Your known ani value'; 

foreach($myarray AS $array){ 
    if($array['ani'] == $yourani){ 
     unset($array); 
    } 
} 
+3

這不會修改原始數組。 – jterry

2

有有幾種方法可以解決這個問題,但array_filter可能是最具擴展性的。您將需要創建一個回調函數,你想擺脫,然後用它作爲陣列的過濾器,其搜索值:

function filterCallback($value) { 
    if($value['ani'] == "472367427") { 
     return false; 
    } else { 
     return true; 
    } 
} 

$array = array_filter($array,'filterCallback'); 

到這樣做的好處是,你可以抽象的篩選邏輯(和使其更復雜),而不必在foreach循環內完成。

http://www.php.net/manual/en/function.array-filter.php

+0

這不會修改原始數組。 - 無論如何:最可伸縮的可能是使用'each'的'for'循環。爲了過濾這些內容,您只需要一個過濾器函數 - 就像調用「filterCallback」一樣。這甚至可以讓你跳過或打破循環,這是'array_filter'不可能實現的。對於不在'foreach'循環內執行*,可能首選模式是使用'FilterIterator',這對於保持事物很好地解耦是非常好的。 – hakre

0

您可以使用array_search得到這樣

$a = array('one', 'two', 'three', 472367427, 'four', 'five'); 
unset($a[array_search(472367427, $a)]);