PHP - 在多维数组中按键获取值

时间:2012-03-23 09:52:43

标签: php arrays

我有一个多维数组,如:

$fields = 
    Array (
        [1] => Array
            (
                [field_special_features5_value] => Special Function 5
            )

        [2] => Array
            (
                [field_special_features6_value] => Special Function 6
            )

        [3] => Array
            (
                [field_opticalzoom_value] => Optical Zoom
            )
    )

我想通过密钥获取值,我尝试了下面的代码,但没有工作

$tmp = array_search('field_special_features5_value' , $fields);
echo $tmp;

如何获取密钥Special Function 5的值field_special_features5_value

由于

5 个答案:

答案 0 :(得分:3)

print $fields[1]['field_special_features5_value'];

或者如果你不知道你的数组是哪个索引,就像这样:

function GetKey($key, $search)
{
    foreach ($search as $array)
    {
        if (array_key_exists($key, $array))
        {
            return $array[$key];
        }
    }

    return false;
}

$tmp = GetKey('field_special_features5_value' , $fields);
echo $tmp;

答案 1 :(得分:1)

如果您知道$fields数组中的位置,请尝试:

$value = $fields[1]['field_special_features5_value'];

如果没有,请尝试:

function getSubkey($key,$inArray)
{
    for ($fields as $field)
    {
         $keys = array_keys($field);
         if (isset($keys[$key])) return $keys[$key];
    }

    return NULL;
}

并像这样使用它:

<?php
     $value = getSubkey("field_special_features5_value",$fields);
?>

答案 2 :(得分:1)

您需要搜索递归:

function array_search_recursive(array $array, $key) {
    foreach ($array as $k => $v) {
        if (is_array($v)) {
            if($found = array_search_recursive($v, $key)){
                return $found;
            }
        } elseif ($k == $key) {
             return $v;
        } else {
             return false;
        }
    }
}

$result = array_search_recursive($fields, 'field_special_features5_value');

答案 3 :(得分:0)

您的问题是,在搜索阵列之前,您首先拥有顶级索引。因此,要访问该值,您需要执行此操作:

$tmp = $fields[1]['field_special_features5_value'];

答案 4 :(得分:0)

你可以使用像这样的递归函数

<?php

function multi_array_key_exists($needle, $haystack) {
       foreach ($haystack as $key=>$value) {
         if ($needle===$key) {
           return $key;
         }
         if (is_array($value)) {
           if(multi_array_key_exists($needle, $value)) {
             return multi_array_key_exists($needle, $value);
           }
         }
       }
   return false;
 }
?>