PHP:获取当前数组键?

时间:2010-01-13 05:56:15

标签: php search arrays recursion find

$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循环。

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

这样可行,但它返回'User:Array has test = 1'

我到底如何获得哪个ID号(该随机数)中的test = 1?

我尝试过$array as $sub=>$value,但由于某种原因,它只会使foreach无效。谢谢!

2 个答案:

答案 0 :(得分: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';
  }
}

答案 1 :(得分: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