2013-04-26 107 views
0

我有这样的阵列 - 它是一个多维数组,我不知道0指数php数组:在一行中,如何从已知密钥中获取未知值?

Array 
(
    [0] => Array 
     (
      [foo] => 1111 
      [bar] => example 
     ) 

) 

我需要,在一条线,与本地的PHP函数,来从价值密钥bar。我尝试了很多与current,key,array_keys等的组合。 随着current($array)我:

Array 
(
    [foo] => 1111 
    [bar] => example 
) 

我发现array_keys,这让我,第二个参数,指定一个值来查找。但我不知道价值,只有关键,并且array_values没有提出第二个参数来查找(:o)。

这里我现在:current(array_keys(array_flip(current($b))), 'bar')没有工作。但是

$c = array_flip(current($b)); 
print_r(current(array_keys($c, 'bar'))); 

作品 - 我得到“例子”。 (顺便说一下,为什么这2条线路正在工作,而不是前一条线路?)。

而且我知道,为此使用array_flip是丑陋的,但我不知道如何去做。任何想法 ?谢谢。

+0

原因,你需要* *在这一条线? – 2013-04-26 14:56:40

+0

“The”key“bar”?你的数组包含一个“etc”部分。谁说那里没有其他的“酒吧”?另外,如果您需要在一行上完成,请编写一个函数。函数调用将是一个单线程。 – Jon 2013-04-26 14:57:00

+0

我想用一条线 - 我的生意。忘记等部分,我会删除它。 – 2013-04-26 14:58:19

回答

2

在PHP 5.4+试试这个:

<?php 
$a = array(array('foo' => 1111, 'bar' => 'example')); 
print_r(current($a)['bar']); 
?> 
+0

上帝,你是对的:http://codepad.viper-7.com/fCiVWz 好的PHP-5.4,这太棒了。 – 2013-04-26 15:25:22

+0

这会抛出一个错误:http://codepad.viper-7.com/v82ybi – HamZa 2013-04-26 15:29:35

+0

是的,如果没有'酒吧'键。但这是一个通知 - 对我来说可以!这两个答案都很好,所以。 – 2013-04-26 15:38:09

5

什么使用

$value=$myArray[0]["bar"]; 
echo $value; 
+0

这应该是一个评论而不是答案。 – Jon 2013-04-26 14:58:11

+1

但这太简单了,不会调用函数! :p – 2013-04-26 14:58:14

+2

@jon:然而,这是答案。 OP的显然是过分复杂/过度的东西...... – 2013-04-26 14:58:54

0

阻止你做你需要这样的事?

$c = $b[0]['bar']; 
0
$a = array(array('foo' => 1111, 'bar' => 'example')); 
echo $a[0]['bar']; 

例如

0

使用此代码:

echo $array[0]['bar']; 

或者,使用PHP功能:

echo array_pop(array_shift($array)); 

将提取的$array第一个元素:

Array 
(
    [foo] => 1111 
    [bar] => example 
) 

然后提取并显示该阵列的最后一个元素:

example 
0

如果不希望使用[0]时,可以代替使用这样的:

$value = null; 
foreach($array as $each) 
{ 
    if(isset($each['bar'])) 
     $value = $each['bar']; 
} 
+0

而且我也不想要循环。 ;) – 2013-04-26 15:11:14

+0

那么,现在你只是很难。 :-P – aynber 2013-04-26 15:12:06

1

不要问我怎么LOL:

$a = array(array('foo' => 1111, 'bar' => 'example')); 
echo array_map(function($v){if(isset($v['bar'])){return $v['bar'];}}, $a)[0]; 

注:

  • 这仅适用于PHP 5的最新版本。4+如果没有一个 “棒” 键

Online demo

  • 这将抛出一个错误。


    更好的解决方案:

    $a = array(
        array('aaa' => 2222, 'bbb' => '333'), 
        array('foo' => 1111, 'bar' => 'example'), 
        array('wut' => 'lol', 'zzz' => 'ggg') 
    ); 
    
    echo array_values(array_filter(array_map(function($v){if(isset($v['bar'])){return $v['bar'];}}, $a)))[0]; 
    

    Online demo

  • +0

    是的,这很不错。但是,你是我们的本地功能;)编辑:看@ b4v答案:codepad.viper-7.com/fCiVWz – 2013-04-26 15:24:33

    相关问题