2017-06-14 56 views
1

我試圖獲得值爲​​列鍵。但無法得到確切的價值。試過array_search()如果條件檢查多列數組的值php

審查陣列

需要檢查所有​​鍵無論是價值1或沒有價值。

Array 
(
[0] => Array 
    (
    [first_name] => Array 
      (
       [0] => john 
      ) 

     [is_activated] => Array 
      (
       [0] => 0 
      ) 
    ) 

[1] => Array 
    (

     [first_name] => Array 
      (
       [0] => mark 
      ) 
     [is_activated] => Array 
      (
       [0] => 1 
      ) 

    ) 

[2] => Array 
    (

     [first_name] => Array 
      (
       [0] => pretik 
      ) 
     [is_activated] => Array 
      (
       [0] => 0 
      ) 
    ) 

) 

我試過下面的這個解決方案,但是不能得到結果。

$is_user_activated = array_search(1,array_column($activity,'is_activated')); 

if($is_user_activated == 1) { echo 'yes'; } 
else { echo 'no'; } 
+2

'is_activated'列的值是__array__ –

+0

是的,這就是爲什麼我卡在那裏。 –

回答

2

可以使用array_filter()對於這樣的任務,它允許使用回調過濾功能:

<?php 
$data = [ 
    [ 
     'first_name' => ['john'] , 
     'is_activated' => [0] 
    ], 
    [ 
     'first_name' => ['mark'], 
     'is_activated' => [1] 
    ], 
    [ 
     'first_name' => ['pretik'], 
     'is_activated' => [0] 
    ] 
]; 
$matches = array_filter($data, function($entry) { 
    return in_array(1, $entry['is_activated']); 
}); 
var_dump($matches); 

的輸出是:

array(1) { 
    [1]=> 
    array(2) { 
    ["first_name"]=> 
    array(1) { 
     [0]=> 
     string(4) "mark" 
    } 
    ["is_activated"]=> 
    array(1) { 
     [0]=> 
     int(1) 
    } 
    } 
} 

之所以說是有點尷尬的是,你的初始數據有一個非常奇怪的結構:元素的值是數組本身保存實際值標量值本身。這使得搜索比在「正常」情況下更復雜。因此,如果您可以修復這個奇怪的結構,以便能夠使用更簡單的搜索方法,請仔細閱讀。

+0

是的結構是非常複雜的......有沒有什麼辦法使它像這樣'$ records = array( array( 'first_name'=>'John', 'last_name'=>'Doe', ), array( 'first_name'=>'Sally', 'last_name'=>'Smith', ),' –

+0

我應該如何比較輸出數組值與if條件;像'is_activated'值= 1或不? –

+0

關於你的第一條評論:你的意思是你想改變你已有的數據結構?當然,你現在在這裏提出的結構是可能的,實際上更有意義。但我不知道你從哪裏得到這些數據,也不知道你如何爲這項搜索做好準備。 – arkascha

3

我想你想在一個循環中做這個,而不是使用array_search。使用foreach(),以獲得您想要的結果:

foreach($yourArray as $item) { 
    if($item['is_activated'][0] == 1) { 
     echo 'yes'; 
    } else { 
     echo 'no'; 
    } 
} 
0

你可以通過array_filter激活的用戶:

$activated = array_filter($users, function($record) { 
    return reset($record['is_activated']) == 1; 
}); 

這將只保留誰被激活的用戶,則可以簡單地計算數組看看,如果您有任何激活的用戶:

echo count($activated) ? 'yes' : 'no'; 

這裏舉例:http://ideone.com/mMuJcO