【问题标题】:Check if a specific word is in an array检查特定单词是否在数组中
【发布时间】:2013-08-19 19:48:09
【问题描述】:

我遇到了一些与检查返回的数组是否匹配的问题。

这是我的工作:

我查询一个服务器 API,API 返回一个可打印的结果:

print_r($result);

打印出来的结果是:

Array
(
    [<html><center>Password_Saved!</center></html>] => 
)

所以我想我可以这样做:

function checkResult ($needle, $haystack) {   return ( stripos($haystack,$needle) !== false ? TRUE : FALSE); }

if ((checkResult("saved",$result))) {
echo "saved";
} else {
echo "not saved";
}

但是,这根本不起作用,所以我想知道如果 $result 包含保存的字符串,您是否可以帮助我找到一种方法,因为我需要知道这一点才能根据结果执行下一个操作。

非常感谢您的帮助。

【问题讨论】:

  • stripos 需要一个 string 作为大海捞针。你传入一个数组...它被默默地转换为字符串"Array"(并在较新版本的PHP中发出警告)。

标签: php


【解决方案1】:

您要查找的值存在于数组的键中,而不是值中。 因此,您需要在数组的键而不是值中进行搜索。

foreach ($result as $key => $value)
{
   if (false !== stripos ($key, "saved"))
   {
      print "{$key} => Saved";
   }
}

【讨论】:

  • 这是正确解决问题的唯一答案。
  • @BenM:为什么?不区分大小写
  • 这非常有效。再次感谢,这确实帮助了我很多,我实际上从中学到了一些东西:)
【解决方案2】:

它不起作用,因为当字符串中的值为Saved 时,您正在搜索saved。你应该传递你的数组键。

if ((checkResult("Saved",array_keys($result)[0]))) {
echo "saved";
} else {
echo "not saved";
}

【讨论】:

  • 请检查 OP 提供的 $result 数组的输出。看起来&lt;html&gt;&lt;center&gt;Password_Saved!&lt;/center&gt;&lt;/html&gt; 实际上是数组key,而不是它的值。此外,对于部分匹配,这不会返回 true,这是 OP 所要求的。
  • 编辑后也不好。 stripos 需要一个字符串,而不是一个数组。
  • @BenM 我不明白你所说的匹配只是部分的意思
  • 我的错,没有意识到你传递了第一个数组键,我以为你传递了整个数组。
【解决方案3】:

阅读 php preg_grep function

例如:

$needle_pattern = '/search/i'; // i for case insensitive
preg_grep($needle_pattern, $array_haystack);

另请注意,在您的代码中,您混合了不同的“已保存”和“已保存”:)

如需进一步了解此方法:

How to search in an array with preg_match?

P.S 如果您的“干草堆”实际上是键,您可以将 $array_haystack 与 array_keys($array_haystack) 切换以获取所有键的数组。

【讨论】:

  • 这不起作用,因为saved 只是部分匹配。另外,查看他提供的打印输出,看起来&lt;html&gt;&lt;center&gt;Password_Saved!&lt;/center&gt;&lt;/html&gt; 实际上是数组key,而不是它的值。
  • 再次,请检查输出。这不是搜索数组的值,而是搜索它的键......
  • 再次修复(最后一条评论)
猜你喜欢
  • 2017-11-10
  • 1970-01-01
  • 2016-08-19
  • 2011-10-28
  • 1970-01-01
  • 2015-11-17
  • 2013-12-23
  • 1970-01-01
相关资源
最近更新 更多