PHP: получить текущий ключ массива? - PullRequest
2 голосов
/ 13 января 2010
$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))
);

У меня есть массив, который имеет (много) случайных ключей, идентификационный номер. Мне нужно проверить каждый массив, если 'test' = 1, и поэтому я сделал цикл foreach.

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

Это работает, но возвращает 'User: Array has test = 1'

Как же узнать, какой идентификационный номер (это случайное число) содержит test = 1?

Я пытался сделать $array as $sub=>$value, но по какой-то причине просто foreach не работает. Спасибо!

Ответы [ 2 ]

11 голосов
/ 13 января 2010

Используйте этот синтаксис 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';
  }
}
3 голосов
/ 13 января 2010

Есть 2 проблемы с вашим кодом.

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
...