2010-01-13 76 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