搜索多维数组子阵列

时间:2015-04-15 09:34:32

标签: php arrays

嗨,我有以下数组

$langarr[0][0]  =    gb
$langarr[0][1]  =    1
$langarr[1][0]  =    de
$langarr[1][1]  =    2
$langarr[2][0]  =    fr
$langarr[2][1]  =    3
$langarr[3][0]  =    it
$langarr[3][1]  =    5

现在我想搜索未设置的

if(($keyy = array_search('de', $langarr[][0])) !== false) {
    unset($langarr[$keyy]);
}

所以我想搜索langarr[any][0],如果匹配,我想删除整个数据集,如unset($langarr[X]);

如何实现这一目标?

3 个答案:

答案 0 :(得分:1)

$langarr = array();

$langarr[0][0]  =    "gb";
$langarr[0][1]  =    "1";
$langarr[1][0]  =    "de";
$langarr[1][1]  =    "2";
$langarr[2][0]  =    "fr";
$langarr[2][1]  =    "3";
$langarr[3][0]  =    "it";
$langarr[3][1]  =    "5";

//获取搜索数组的密钥

$value = recursive_array_search("de",$langarr);

//打印密钥

print_r($value);

//取消设置数组" de"其中有关键" 1"

unset($langarr[$value]);

//打印结果数组

的print_r($ langarr);

function recursive_array_search($needle,$haystack) {
    foreach($haystack as $key=>$value) {
        $current_key=$key;
        if($needle===$value OR (is_array($value) && recursive_array_search($needle,$value) !== false)) {
            return $current_key;
        }
    }
    return false;
}

答案 1 :(得分:1)

使用array_filter()。它需要一个(匿名)函数作为第二个参数。函数本身接收一个数组元素作为其参数。如果该函数返回false,则从数组中删除数组元素。

所以以你的例子为例,如果$needle是'de',则删除子阵列。

$langarr = array(
  array('gb', 1),
  array('de', 2),
);

$needle = 'de';
$langarr = array_filter($langarr, function($row) use($needle) {
  return ($row[0] != $needle);
});

Online test

答案 2 :(得分:1)

<?php
$langarr[0][0]  =    "gb";
$langarr[0][1]  =    1;
$langarr[1][0]  =    "de";
$langarr[1][1]  =    2;
$langarr[2][0]  =    "fr";
$langarr[2][1]  =    3;
$langarr[4][0]  =    "it";
$langarr[4][1]  =    4;
print_r($langarr);
foreach($langarr as $key=>$data){
    if($data[0]=='de'){
        unset($langarr[$key]);
    }
}
print_r($langarr);
?>