Проверьте, существует ли значение в многомерном массиве, используя array_search и array_column, не возвращающие значения массива [0]
Мне нужно проверить, существует ли значение в многомерном массиве. Я нашел этот пример в qaru.site/info/111937/... и на 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
(или попробуйте с "именем" или "pic_square").
Ответы
Ответ 1
Вы можете использовать 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
(как найдено совпадение в самом первом индексе массива).
Ответ 2
Это потому, что ваше значение 100
находится в первом индексе 0
, поэтому, если условие терпит неудачу. Вместо этого сравните с false
строго:
DEMO
if(array_search(100, array_column($userdb, 'uid')) !== False) {
echo "FOUND";
} else {
echo "Not Found";
}
Для этого примера лучше использовать in_array
, так как вы просто проверяете, как элемент находится в массиве или нет. Используйте, array_search
если вы хотите получить индекс элемента.
Ответ 3
Это потому, что array_search
возвращает ключ, который в этом случае равен 0
, что будет равно false. Вам нужно провести строжайшее сравнение, то есть:
if (false !== array_search(100, array_column($userdb, 'uid'))) {
...
}
Ответ 4
Вы можете попробовать это:
$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
}
}
}