Php 筛选具有相似字符的多维数组

Php 筛选具有相似字符的多维数组,php,arrays,json,multidimensional-array,Php,Arrays,Json,Multidimensional Array,我有一个json文件,需要在这两列中查找相似的值。 对于JSON,它有5000行,所以我认为循环到每个行不是正确的方法。 我的json如下所示: { "code": "8485", "title": "A BAD DREAM", "artist": "KEANE" }, { "code": "50957", "title": "A BIG HUNK O' LOVE", "artist": "ELVIS PRESLEY" }, { "code":

我有一个json文件,需要在这两列中查找相似的值。 对于JSON,它有5000行,所以我认为循环到每个行不是正确的方法。 我的json如下所示:

{
   "code": "8485",
   "title": "A BAD DREAM",
   "artist": "KEANE"
 },
 {
   "code": "50957",
   "title": "A BIG HUNK O' LOVE",
   "artist": "ELVIS PRESLEY"
 },
 {
   "code": "55481",
   "title": "A BLUE GUITAR",
   "artist": "TANYA TUCKER"
 },
例如,我将查找带有字母“B”的对象,它应该查找那些同时包含标题和艺术家字母“B”的对象


因此,我所做的是将JSON转换为多维数组。我不能让数组过滤器与多维数组一起工作

这就是如何使用
array\u filter

您可以使用
strpos
检查字符串是否包含字符串

注意:这将检查标题艺术家(任一)是否有搜索词或字母。如果要同时查找这两个选项,请参阅Syscall的答案。:)


有关详细信息:

这是如何使用
array\u filter

您可以使用
strpos
检查字符串是否包含字符串

注意:这将检查标题艺术家(任一)是否有搜索词或字母。如果要同时查找这两个选项,请参阅Syscall的答案。:)

有关详细信息:

使用
array\u filter()
应该可以:

这将检查标题和艺术家的匹配情况。如果您想查看标题或艺术家,请使用
array\u filter()检查Eddie的anwser:)

应该可以:


这将检查标题和艺术家的匹配情况。如果你想查看标题艺术家,请查看Eddie的anwser:)

你用
array\u filter()。但是我读的是“为了标题和艺术家”,所以我编码
&
,而不是
|
。我是对的还是我误解了?是的。我也不确定,我想OP会决定的。哈哈,谢谢你的帮助!现在我明白了。实际上,您的和Syscall都帮助了我,但我选择这个作为答案,因为它使用OR。非常感谢你!嘿:)几乎相同的代码:)。但是我读的是“为了标题和艺术家”,所以我编码
&
,而不是
|
。我是对的还是我误解了?是的。我也不确定,我想OP会决定的。哈哈,谢谢你的帮助!现在我明白了。实际上,您的和Syscall都帮助了我,但我选择这个作为答案,因为它使用OR。非常感谢你!谢谢你,伙计!我本可以用你的答案,但埃迪的答案更接近。谢谢谢谢你,伙计!我本可以用你的答案,但埃迪的答案更接近。谢谢
$arr = '[
{
   "code": "8485",
   "title": "A BAD DREAM",
   "artist": "KEANE"
 },
 {
   "code": "50957",
   "title": "A BIG HUNK O\' LOVE",
   "artist": "ELVIS PRESLEY"
 },
 {
   "code": "55481",
   "title": "A BLUE GUITAR",
   "artist": "TANYA TUCKER"
 }
 ]
';

$arr = json_decode( $arr, true );

$search = "O"; /* Search letter O */

$result = array_filter( $arr, function( $v ) use ( $search ) {
    return strpos($v[ "title" ], $search) !== false || strpos($v[ "artist" ], $search) !== false;
});

echo "<pre>";
print_r( $result );
echo "</pre>";
Array
(
    [1] => Array
        (
            [code] => 50957
            [title] => A BIG HUNK O' LOVE
            [artist] => ELVIS PRESLEY
        )

)
$cond = "B" ;
$result = array_filter($data, function($a) use ($cond) {
    return strpos($a['title'], $cond) !== false &&
           strpos($a['artist'], $cond) !== false;
});