我有一个json文件,我需要在两列中查找类似的值。 对于JSON,它有5,000行,所以我不认为循环到每个是正确的方法。 我的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_filter与多维数组一起工作。
答案 0 :(得分:2)
这是您使用array_filter
您可以使用strpos
检查字符串是否包含字符串。
注意:这将检查标题 OR 艺术家(任一个)是否包含搜索字词或字母。如果您正在寻找两者,请参阅Syscall的答案。 :)
$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
)
)
答案 1 :(得分:1)
使用array_filter()
应该有效:
$cond = "B" ;
$result = array_filter($data, function($a) use ($cond) {
return strpos($a['title'], $cond) !== false &&
strpos($a['artist'], $cond) !== false;
});
这将检查标题和艺术家的匹配项。如果您想查看艺术家的标题或,请查看Eddie's anwser :)