2013-07-09 111 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)]);