2017-06-14 2 views
1

Ich versuche, Wert von is_activated Spaltenschlüssel zu erhalten. Aber kann nicht den genauen Wert erhalten. Haben array_search() versuchtWenn Bedingung, um Wert von mehreren Spaltenarray zu überprüfen, PHP

Überprüfen Sie die Array

Brauchen Wert aller is_activated Schlüssel zu überprüfen, ob es Wert ist 1 oder nicht.

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

) 

Ich habe versucht, dies unter Lösung, aber kann nicht Ergebnis erhalten.

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

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

'is_activated' columns Wert ist __array__ –

+0

Ja, deshalb stecke ich da drüben. –

Antwort

2

Sie die array_filter() für solche Aufgaben verwenden können, ermöglicht es eine Rückruffilterfunktion zu verwenden:

<?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); 

Der Ausgang davon ist:

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

Grund, warum das ist ein etwas peinlich ist, dass Ihre Ausgangsdaten eine sehr seltsame Struktur haben: Die Werte der Elemente sind Arrays selbst halten die tatsächlichen Werte statt von skalaren Werten selbst. Das macht das Suchen komplexer als in "normalen" Situationen. Schauen Sie also gut hin, wenn Sie vielleicht diese seltsame Struktur reparieren können, um einen einfacheren Suchansatz zu verwenden.

+0

Ja die Struktur ist sehr complected ... gibt es eine Möglichkeit, es so zu machen '$ records = array ( array ( 'first_name' => 'John', 'last_name' => 'Doe', ), Array ( 'first_name' => 'Sally', 'last_name' => 'Smith', ), ); ' –

+0

Und wie soll ich die Ausgabe-Array-Wert mit, wenn die Bedingung zu vergleichen; Wie 'is_activated' Wert = 1 oder nicht? –

+0

Über Ihren ersten Kommentar: Sie meinen, Sie möchten die Struktur der Daten ändern, die Sie bereits haben? Sicher ist die Struktur, die Sie hier vorschlagen, möglich und macht tatsächlich viel mehr Sinn. Aber ich weiß nicht, woher Sie diese Daten bekommen und wie Sie sie für diese Suche vorbereiten. – arkascha

3

Ich denke, dass Sie dies in einer Schleife tun möchten, anstatt array_search zu verwenden. Verwenden Sie eine foreach() das gewünschte Ergebnis zu erhalten:

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

Sie können die aktivierten Benutzer über array_filter erhalten:

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

Dies wird nur Benutzer halten, die aktiviert sind, können Sie dann zählen einfach die Array um zu sehen, wenn Sie irgendwelche aktivierte Benutzer haben:

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

Beispiel hier: http://ideone.com/mMuJcO

Verwandte Themen