【问题标题】:Filter a multidimensional array with similar characters过滤具有相似字符的多维数组
【发布时间】:2018-02-10 17:13:19
【问题描述】:

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

【问题讨论】:

  • 您对array_filter() 进行了哪些尝试,结果如何?

标签: php arrays json multidimensional-array


【解决方案1】:

这就是你可以使用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

【讨论】:

  • 嘿 :) 几乎相同的代码 :)。但是我读了“标题和艺术家”,所以我编码&amp;&amp;而不是||。我是对的还是我误解了?
  • 是的。我也不确定,我猜OP会决定那个。哈哈
  • 感谢您的帮助!现在我明白了。实际上,您和 Syscall 都帮助了我,但我选择了这个作为答案,因为它使用 OR。非常感谢!
【解决方案2】:

使用array_filter() 应该可以:

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

这将检查标题艺术家的匹配。如果您想查看标题艺术家,请查看 Eddie 的回答 :)

【讨论】:

  • 谢谢你!我本可以把你的作为答案,但埃迪的更接近。谢谢!!
猜你喜欢
  • 1970-01-01
  • 2016-01-19
  • 2017-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-14
  • 2017-02-17
  • 2023-03-19
相关资源
最近更新 更多