多次元配列に値が存在するかどうかを確認する必要があります。 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ステートメントは、check[〜#〜]のいずれかの値の存在をチェックする場合、値を返しません。 first [〜#〜]配列(Array [0]
)。他の配列の値で動作します。 100
最初に、次に40489
(または「名前」または「pic_square」で試してください)。
以下のように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";
}
?>
注:-以下のように比較を変更しても、コードは機能します。
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
(配列の最初のインデックスで見つかった一致として)を返すため、コードが失敗します。
これは、値100
が最初のインデックス0
にあるため、条件が失敗したためです。代わりにfalse
と厳密に比較してください:
if(array_search(100, array_column($userdb, 'uid')) !== False) {
echo "FOUND";
} else {
echo "Not Found";
}
この場合、要素が配列内にあるかどうかを確認するだけなので、in_array
を使用することをお勧めします。要素のインデックスを取得する場合は、array_search
を使用します。
array_search
はキーを返します。この場合は0
、これはfalseと同等です。厳密な比較を行う必要があります。つまり:
if (false !== array_search(100, array_column($userdb, 'uid'))) {
...
}
これを試してみてください:
$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
}
}
}