在多维数组中查找值

时间:2016-03-27 00:01:13

标签: php arrays multidimensional-array

我必须在多维数组中找到值,未定义数组的大小。 假设用户输入1601,结果为011。 如果1605,结果将是015根据数组

   array (size=6)
      0 => 
        array (size=2)
          0 => string 'Zipcode' (length=7)
          1 => string 'Territory Code' (length=14)
      1 => 
        array (size=2)
          0 => string '1601' (length=4)
          1 => string '011' (length=3)
      2 => 
        array (size=2)
          0 => string '1602' (length=4)
          1 => string '012' (length=3)
      3 => 
        array (size=2)
          0 => string '1603' (length=4)
          1 => string '013' (length=3)
      4 => 
        array (size=2)
          0 => string '1604' (length=4)
          1 => string '014' (length=3)
      5 => 
        array (size=2)
          0 => string '1605' (length=4)
          1 => string '015' (length=3)

2 个答案:

答案 0 :(得分:4)

如果Zipcode是唯一的,那么你可以这样做:

echo array_column($array, 1, 0)[1601];

Territory Code是唯一的:

echo array_search(1601, array_column($array, 0, 1), true);

array_column()从多维数组中提取一列以创建一维数组。

  

array array_column(array $ input,mixed $ column_key [,mixed $ index_key = null])

第二个参数$column_key,用于定义要从多维数组中作为值到达一维数组的列。第三个参数$index_key定义了您要用作哪一列作为您获得的一维数组的键。如果未定义$index_key,则数组将被枚举。

第一个代码示例

因此,第一个示例提取了一个数组,如:

array(1601 => '011', 1602 => '012')

使用值1601作为键,您可以获得所需的输出011

第二个代码示例

第二个示例使用如下数组:

array('011' => 1601, '012' => 1602)

使用array_search()搜索1601以获取密钥011,这是所需的输出。

请参阅以下两个示例,了解第二个和第三个参数的作用:

print_r(array_column($array, 1, 0));
print_r(array_column($array, 0, 1));

答案 1 :(得分:0)

我编写了一个执行此操作的嵌套函数:

$read=[
    ['Honar','607836545742426','IRO7P0001'],
    ['Danial','2304906587905','IRO7KHEP01'],
    ['Key'=>['sub_key'=>'sub_value']]
];

function is_exists_value($array,$needle){

    if(!is_array($array) || is_null($needle))
        exit("Error: check input");

    if (array_key_exists($needle, $array)){
        return true;
    }elseif(in_array($needle,$array)){
        return true;
    }else{
        foreach ($array as $value)
            if(is_array($value))
                if(is_exists_value($value,$needle))
                    return true;
    }

    return false;
}

var_dump(is_exists_value($read,"sub_value")); // Return True 
var_dump(is_exists_value($read,"Key")); // Return True