2017-07-25 32 views
0

使用这个作为一个例子和意识到的key如何通过搜索偏移值来获得关联数组的键?

$arr = array(
    'product1'=>array('color'=>'blue','size'=>'medium'), 
    'product2'=>array('color'=>'green','size'=>'large'), 
    'product3'=>array('color'=>'yellow','size'=>'small'), 
); 

是否有通过其增加后的值获得在多维数组任何密钥的方法?

例如,我想获得上面的$arr中的第三个数组值的关键。 $arr[2]会返回值(一个数组包含黄色/小)。

有没有办法利用key函数通过数字迭代器获取任何键,而不是“当前位置”的键?

或者,是否有另一个内置函数,我明显忽略了这将返回键$arr[2],而不是它的价值?

echo getkey($arr[2]); 

# returns product3 
+0

你想尝试array_map来实现你的解决方案 – Gunnrryy

+0

你选择的答案编码器,没有在哪里检查基于给定数字的任何键是否存在。所以它会在多种情况下给出未定义的索引错误。 –

+0

对于刚才低估了这个问题的人:如果你打算至少发表评论来解释你的行为。不要打并跑步。 –

回答

3

只需使用array_keys功能:

$arr = array(
      'product1'=>array('color'=>'blue','size'=>'medium'), 
      'product2'=>array('color'=>'green','size'=>'large'), 
      'product3'=>array('color'=>'yellow','size'=>'small'), 
     ); 

$keys = array_keys($arr); 

echo $keys[2]; 

// shorter version 
echo array_keys($arr)[2]; 

更多的相关信息:http://php.net/manual/en/function.array-keys.php

+0

这个答案否根据给定的数字检查是否存在任何密钥。所以它会在多种情况下给出未定义的索引错误。 –

1

可以使用array_keys()功能:

function getKey($arr, $i) { 
    if (empty($arr[array_keys($arr)[$i]])) { 
     return null; 
    } 

    // array_keys($arr)[$i] returns original array's key at i position 
    // if i = 2, array_keys($arr)[$i] = 'product3' 
    return array_keys($arr)[$i]; 
} 

// echo getKey($arr, 2); 
// returns product3 
+0

@mickmackusa你是对的!完成。 – micster

2

这似乎不符合逻辑/高效生成一个新的/完整的键阵列只是为了从中选择一个。其他答案是“努力工作”。

array_slice()根据位置而不是按键名称特别提取数组的部分。这使它成为这种情况下的完美功能。

更好的做法是只切走你想要的子数组,然后调用它的关键,是这样的:

代码:(Demo

$arr = array(
      'product1'=>array('color'=>'blue','size'=>'medium'), 
      'product2'=>array('color'=>'green','size'=>'large'), 
      'product3'=>array('color'=>'yellow','size'=>'small'), 
     ); 
$key=2; 
echo key(array_slice($arr,$key,1)); // [input],[0-indexed position],[number of subarrays] 

输出:

product3