2010-01-13 77 views
2
$array = ( 
    array('1231415'=>array('foo'=>'bar', 'test'=> 1)), 
    array('32434'=>array('foo'=>'bar', 'test'=> '0')), 
    array('123244'=>array('foo'=>'bar', 'test'=> 0)), 
    array('193928'=>array('foo'=>'bar', 'test'=> 1)) 
); 

我有一个数组,它有(许多)随机密钥,ID号。如果'test'= 1,我需要测试每个数组,因此我做了一个foreach循环。PHP:获取当前的数组密钥?

foreach ($array as $sub) { 
    if ($sub['test'] == '1') { 
    echo 'User: ' . $sub . ' has test = 1'; 
    } 
} 

这工作,但它返回“用户:数组试验= 1”

如何在地球上,我得到的ID号,(即随机数)的测试= 1呢?

我试过做$array as $sub=>$value,但由于某些原因,它只是使foreach无法正常工作。谢谢!

+1

这不是你在这里问同样的问题:http://stackoverflow.com/questions/2054661/php-high- depth-array-how-do-return-current-key-name? –

+0

我尝试了#1建议的答案,但它只是返回: > [0] =>用户:Array has in_env = 1 > [1] => User:Array has in_env = 1 – Jason

+2

因此,您不要使用回答...等待别人来一个新的答案。不需要另一个问题。 –

回答

11

使用此foreach语法来代替:

foreach ($array as $key => $sub) { 
    if ($sub['test'] == '1') { 
    echo 'User: ' . $key . ' has test = 1'; 
    } 
} 

这假设数据的形式是:

$array = array(
    '1234' => array('test' => 1), 
    '5678' => array('test' => 2) 
); 

如果你需要保持你的数据,因为它是现在,你需要使用更类似的东西:

foreach ($array as $item) { 
    list($key, $info) = $item; 
    if ($info['test'] == 1) { 
    echo 'User: ' . $key . ' has test = 1'; 
    } 
} 
+2

考虑到他在这里的数组结构,这实际上并不正确。 – nickf

+0

您是对的 - 我已经使用替代数据格式和符合当前数据格式的解决方案对它进行了更新。 – pix0r

+0

@ pix0r:你的第三段代码片段不适合他,因为他的数组定义有语法错误。 – Asaph

3

您的代码有两个问题。

1)你的数组声明有点搞砸了。试试这个:

$array = array( 
    '1231415'=>array('foo'=>'bar', 'test'=> 1), 
    '32434'=>array('foo'=>'bar', 'test'=> 0), 
    '123244'=>array('foo'=>'bar', 'test'=> 0), 
    '193928'=>array('foo'=>'bar', 'test'=> 1) 
); 

2)在你的foreach,你失去的ID密钥。试试这个:

foreach ($array as $id => $sub) { 
    if ($sub['test'] == 1) { 
     echo "User: " . $id . " has test = 1\n"; 
    } 
} 

在我的测试上面的输出:

User: 1231415 has test = 1 
User: 193928 has test = 1