web-dev-qa-db-de.com

Überprüfen Sie, ob der Wert in einem mehrdimensionalen Array vorhanden ist. Verwenden Sie array_search und array_column, die keine Werte von Array [0] zurückgeben.

Ich muss überprüfen, ob ein Wert in einem mehrdimensionalen Array vorhanden ist. Ich habe dieses Beispiel auf Stackoverflow und auf PHP.NET gefunden, was mir gefällt, weil es eine elegante und kompakte Lösung ist, aber ich habe ein seltsames Verhalten festgestellt:

$userdb=Array
(
(0) => Array
    (
        (uid) => '100',
        (name) => 'Sandra Shush',
        (pic_square) => 'urlof100'
    ),

(1) => Array
    (
        (uid) => '5465',
        (name) => 'Stefanie Mcmohn',
        (pic_square) => 'urlof100'
    ),

(2) => Array
    (
        (uid) => '40489',
        (name) => 'Michael',
        (pic_square) => 'urlof40489'
    )
);



if(array_search(100, array_column($userdb, 'uid'))) {
    echo "FOUND";
}

Die IF-Anweisung gibt keinen Wert zurück, wenn Sie check das Vorhandensein eines Werts des FIRST Arrays (Array [0]) angeben. Es funktioniert mit den Werten der anderen Arrays. Versuchen Sie es zuerst mit 100 und dann mit 40489 (oder versuchen Sie es mit einem "Namen" oder "pic_square").

19
Nicero

Sie können in_array() wie folgt verwenden: -

<?php
$userdb=Array
(
'0' => Array
    (
        'uid' => '100',
        'name' => 'Sandra Shush',
        'url' => 'urlof100'
    ),

'1' => Array
    (
        'uid' => '5465',
        'name' => 'Stefanie Mcmohn',
        'pic_square' => 'urlof100'
    ),

'2' => Array
    (
        'uid' => '40489',
        'name' => 'Michael',
        'pic_square' => 'urlof40489'
    )
);
print_r(array_column($userdb, 'uid')); 
if(in_array(100, array_column($userdb, 'uid'))) { // search value in the array
    echo "FOUND";
}
?>

Ausgabe: - https://eval.in/1058147

Hinweis: - Ihr Code funktioniert auch, wenn Sie Ihren Vergleich wie folgt ändern: -

if(array_search(100, array_column($userdb, 'uid')) !== False) {
    echo "FOUND";
} else {
    echo "Not Found";
}

durch das Handbuch: - http://php.net/manual/de/function.array-search.php

Es sättigt: - 

Gibt den Schlüssel für die Nadel zurück, wenn er im Array gefunden wird, andernfalls FALSE.

php behandelte 0 als false und 1 als true, wenn es als Rückgabewert einer Funktion kommt. Aus diesem Grund schlägt der Code fehl, da er 0 zurückgibt.

40
Alive to Die

Das liegt daran, dass array_search den Schlüssel zurückgibt, der in diesem Fall 0 lautet. Sie müssen einen strengen Vergleich durchführen, dh:

if (false !== array_search(100, array_column($userdb, 'uid'))) {
    ...  
}

Siehe hier

3
billyonecan

Dies liegt daran, dass sich Ihr Wert 100 im ersten Index 0 befindet. Wenn also die Bedingung fehlschlägt. Vergleichen Sie stattdessen streng mit false:

DEMO

if(array_search(100, array_column($userdb, 'uid')) !== False) {
    echo "FOUND";
} else {
    echo "Not Found";
}

In diesem Fall ist es besser, in_array zu verwenden, da Sie nur prüfen, ob sich das Element im Array befindet oder nicht. Verwenden Sie array_search, wenn Sie den Index des Elements abrufen möchten. 

3
Thamilan

Sie können dies versuchen:

$res1 =Array
(
'0' => Array
    (
        'uid' => '100',
        'name' => 'Sandra Shush',
        'url' => 'urlof100'
    ),

'1' => Array
    (
        'uid' => '5465',
        'name' => 'Stefanie Mcmohn',
        'pic_square' => 'urlof100'
    )
);

$res2 =Array
(
'0' => Array
    (
        'uid' => '40489',
        'name' => 'Michael',
        'pic_square' => 'urlof40489'
    )

'1' => Array
    (
        'uid' => '5465',
        'name' => 'Stefanie Mcmohn',
        'pic_square' => 'urlof100'
    )
);

foreach ($res1 as $key=>$item1)
{
    $val=$item1['uid'];
    foreach ($res2 as $key2=>$item2)
    {
          if ($item2['uid'] == $val)
           {
                //value 5465 found
           }
    }
}
0
Ranjith R