php - 在多维数组中搜索任何键中的部分值

标签 php arrays multidimensional-array foreach

<分区>

我有一个数组,其中包含项目列表和关于这些项目的描述。我正在尝试设置一个脚本,该脚本将在每个值中搜索部分字符串并返回找到该值的键。这是数组的示例。

Array
(
[10023] => Array
    (
        [0] => 10023
        [idTag] => 10023
        [1] => Bolt 4in full thread (252668)
        [desc] => Bolt 4in full thread (252668)
        [2] => PL9811
        [serialNo] => PL9811 
        [3] => 252-668
        [modelNo] => 252-668
    )
[10024] => Array
    (
        [0] => 10024
        [idTag] => 10024
        [1] => Bolt 6in full thread (252-670)
        [desc] => Bolt 6in full thread (252-670)
        [2] => PL9823
        [serialNo] => PL9823 
        [3] => 
        [modelNo] =>
    )

[91143] => Array
    (
        [0] => 91143
        [idTag] => 91143
        [1] => PEG 2.5mm SS (0711P)
        [desc] => PEG 2.5mm SS (0711P)
        [2] => PX3501
        [serialNo] => PX3501 
        [3] => 0711P
        [modelNo] => 0711P
    )

)

因此,如果我要搜索“252-”,我需要脚本检查该值的所有键(idtag、desc、serialNo 和 modelNo)。然后返回给我 key 10023 和 10024。

我目前使用的脚本是:

function searchFor($haystack, $needle)
{
   foreach($haystack as $key => $value)
   {
      if ($value === $needle )
         return $key;
   }
   return false;
}

就目前而言,它不起作用。但是我要改变吗

if ($value['modelNo'] === $needle)

并仅搜索型号以进行精确匹配(即我的搜索是 225-668 而不是 225-)然后它确实返回 key 10023。

如您所见 - 数组数据存在不一致(这就是此脚本的诞生),因此我需要能够搜索每个可能包含值的键并接收父键。

最佳答案

foreach 再次进入现有的 foreach 并使用 strpos() !== false 来检查 $needlefalse 表示未找到:

foreach($haystack as $key => $array) {
  foreach($array as $value) {
      if(strpos($value, $needle) !== false) {
         return $key;
      }
  }
}

关于php - 在多维数组中搜索任何键中的部分值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19337003/

相关文章:

php - 我如何在 innerhtml 中使用 ajax 和 php 更新 mysql 数据库

java - 用曼哈顿距离模式填充二维数组

javascript - 从多个数组唯一的元素创建一个新数组

javascript - 如何比较嵌套数组中的元素

mysql - 如何在MySQL(使用Workbench)中制作一个二维数组作为表中的键?

php - 如何使用数组值作为没有循环的键?

PHP:如何按顺序替换字符串中的值?

php - 如何在需要默认参数时跳过参数

PHP:preg_replace 使用反向引用替换缩写

c++ - 将对象数组的引用传递给函数