it-swarm.com.ru

Проверьте, существует ли значение в многомерном массиве, используя array_search и array_column, не возвращая значения массива [0]

Мне нужно проверить, существует ли значение в многомерном массиве. Я нашел этот пример в Stackoverflow и в PHP.NET , который мне нравится, потому что это элегантное и компактное решение, но я заметил странное поведение:

$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";
}

Оператор IF не возвращает никакого значения, если вы проверяете существование любого значения массива FIRST (Array [0]). Он работает со значениями других массивов. Сначала попробуйте с 100, затем попробуйте с 40489 (или попробуйте с «name» или «pic_square»).

19
Nicero

Вы можете использовать in_array(), как показано ниже: -

<?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";
}
?>

Вывод: - https://eval.in/1058147

Примечание: - ваш код также будет работать, если вы измените сравнение, как показано ниже: -

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

через руководство: - http://php.net/manual/en/function.array-search.php

Это насыщает: - 

Возвращает ключ для иглы, если он найден в массиве, иначе FALSE.

php рассматривал 0 как false и 1 как true, когда он возвращается как возвращаемое значение из функции. Вот почему ваш код не работает, потому что ваш код возвращает 0.

40
Alive to Die

Это потому, что array_search возвращает ключ, в данном случае 0, который будет равен false. Вам нужно сделать строгое сравнение, а именно:

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

Посмотреть здесь

3
billyonecan

Это потому, что ваше значение 100 находится в первом индексе 0, поэтому, если условие не выполняется. Вместо этого сравните с false строго:

ДЕМО

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

Для этого экземпляра лучше использовать in_array, так как вы просто проверяете, находится ли элемент в массиве или нет. Используйте array_search, если вы хотите получить индекс элемента. 

3
Thamilan

Вы можете попробовать это:

$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