2010-01-13 3 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)) 
); 

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

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

Это работает, но она возвращает «User: Array имеет тест = 1»

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

Я пробовал делать $array as $sub=>$value, но почему-то это просто заставляет foreach не работать. Спасибо!

+1

Разве это не тот же вопрос, который вы просили здесь: http://stackoverflow.com/questions/2054661/php-high- depth-массив-how-do-return-current-key-name? –

+0

Я попробовал, что ответ # 1 предложил, но он просто возвращает: > [0] => Пользователь: Array имеет in_env = 1 > [1] => Пользователь: Array имеет 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

У вас 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, вы теряете идентификатор ключа. Попробуйте это:

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 
Смежные вопросы