过滤具有相似字符的多维数组

时间:2018-02-10 17:13:20

标签: php arrays json multidimensional-array

我有一个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与多维数组一起工作。

2 个答案:

答案 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
        )

)

了解更多信息:http://php.net/manual/en/function.array-filter.php

答案 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 :)