【问题标题】:multidimensional search of pattern within specific key and return all requested arrays php特定键内模式的多维搜索并返回所有请求的数组php
【发布时间】:2015-03-14 09:10:29
【问题描述】:

您好,我正在努力编写一个代码,以在多维中的某些值中检索具有某种模式的数组。

Array([0]=>
      array(5){
        ['id'] => 'YES1'
        ['name'] => 'what'
        ['val1'] => 'hfka'
        ['val2'] => 'adflj'
        ['val3'] => 'afasf'
     }
      [1]=>
     array(5){
        ['id'] => 'KAT1'
        ['name'] => 'what'
        ['val1'] => 'hfka'
        ['val2'] => 'YES1,NO3'
        ['val3'] => 'afasf'
        }
      [2]=>
       array(5){
        ['id'] => 'BAS2'
        ['name'] => 'sdf'
        ['val1'] => 'hfka'
        ['val2'] => 'BOO2,dfslj'
        ['val3'] => 'jal'
     }
      [3]=>
    array(5){
        ['id'] => 'YES4'
        ['name'] => 'sdf'
        ['val1'] => 'hfka'
        ['val2'] => 'BOO2,dfslj'
        ['val3'] => 'jal'
       }

..等等。

触发正确的php代码后:

预期结果:

Result Array([0]=>
          array(5){
               'id' => 'YES4'
               'name' => 'sdf'
               'val1' => 'hfka'
               'val2' => 'BOO2,dfslj'
               'val3' => 'jal'
           }
             [1]=>
           array(5){
               'id' => 'YES1'
               'name' => 'what'
               'val1' => 'hfka'
               'val2' => 'adflj'
               'val3' => 'afasf'
             }

所以对于每个数组,我想在键“id”中搜索模式“YES”并返回所有包含所有信息的数组。我已经用 preg_match 和其他一些尝试了 foreach(x2) 但它们没有产生我想要接收的结果..即结果是正确的;一个空数组;或包含其他数组,因为实验代码过于笼统,并且模式位于另一个键中。

最后,我想得到一个函数 getArraysOfSpecificTypeofID($pattern,$array)。

更新

修正了数组代码以反映数组被转储时返回的内容。

我忘了提到数组中的数据是从 mysql 查询中检索到的。我不确定这是否会改变任何东西,但我认为它不会改变,因为 var_dump($theoriginalarray) 返回与在 php 中手动输入的数组类似的信息。我

我已经尝试了 helpers plus foreach (array as value)、if (preg_match('YES', value) 和 return $results 建议的以下代码,这似乎返回一个空数组。

这可行,但给了我所有包含“是”的数组

$pattern= "/YES/";

$matches = array_filter($array, function($value) use($pattern) { 返回 preg_grep($pattern, $value); });

这也有效,但给了我不想要的值:

foreach ($array as $key) {
  if (!preg_match('*CAT*', $key){
  $results = $key;
  }
}

奇怪的是,如果我删除 '!'甚至将 ==true 添加到 preg_match 的末尾-我收到一个空值。当我使用 strpos 而不是 prey_match 时,情况完全相同。

...帮助,这让我很困惑。

更新 2 谢谢你的帮助。 在尝试过滤它之前,我需要将我的数组解析为另一个变量。谢谢马克,你的代码非常适合我尝试的尝试。

【问题讨论】:

  • 大多数人会希望你发布你的尝试。
  • $resultArray = array_filter($originalArray, function($value) { return fnmatch('*YES*', $value['id']); } );
  • 嗨,马克,不幸的是,该代码返回一个空数组。它会在您删除 ['id'] 时返回值,但它会返回所有包含 'YES' 的数组,包括键 val2 中具有 'YES' 的数组
  • 我提供的代码不应该返回一个空数组,在我运行测试时也不应该返回 - demo

标签: php arrays search multidimensional-array return


【解决方案1】:

现已测试

<?php
header('Content-Type: text/plain; charset=utf-8');

$array=array(
0=>array('id'=>'YES1','name'=>'what','val1'=>'hfka','val2'=>'adflj','val3'=>'afasf'),
1=>array('id'=>'KAT1','name'=>'what','val1'=>'hfka','val2'=>'YES1,NO3','val3'=>'afasf'),
2=>array('id'=>'BAS2','name'=>'sdf','val1'=>'hfka','val2'=>'BOO2,dfslj','val3'=>'jal'),
3=>array('id'=>'YES4','name'=>'sdf','val1'=>'hfka','val2'=>'BOO2,dfslj','val3'=>'jal')
);


foreach($array as $val){
  if (strpos($val['id'],'YES')!==false){
    $result[] = $val;
  } 
}
print_r($result);

结果

[0] => Array
    (
        [id] => YES1
        [name] => what
        [val1] => hfka
        [val2] => adflj
        [val3] => afasf
    )

[1] => Array
    (
        [id] => YES4
        [name] => sdf
        [val1] => hfka
        [val2] => BOO2,dfslj
        [val3] => jal
    )

【讨论】:

  • strpos 比正则表达式快得多
  • 嗨,感谢您的帮助,但是当我 var_dump($results) 时,它返回一个空数组。我尝试了类似的代码,其中代码使用 preg_match 或 preg_grep,而不是 strpos,并且 $result 返回一个空数组。
  • 我会测试和调试,给我几分钟时间。
  • 经过测试、调试和功能。
  • 问题是 strpos() 返回的位置为零(第一个字符),这等于错误。
【解决方案2】:

您可能在键值之后缺少“array(”。

array(
0=>array('id'=>'YES1','name'=>'what','val1'=>'hfka','val2'=>'adflj','val3'=>'afasf'),
1=>array('id'=>'KAT1','name'=>'what','val1'=>'hfka','val2'=>'YES1,NO3','val3'=>'afasf'),
2=>array('id'=>'BAS2','name'=>'sdf','val1'=>'hfka','val2'=>'BOO2,dfslj','val3'=>'jal'),
3=>array('id'=>'YES4','name'=>'sdf','val1'=>'hfka','val2'=>'BOO2,dfslj','val3'=>'jal')
);

当我测试你的阵列时,这个阵列不起作用。

【讨论】:

  • 您好,非常感谢您的意见。我不认为它是数组(因为我试图查询的数组是由以前的 mysql 查询创建和设置的。
猜你喜欢
  • 2017-11-16
  • 2014-04-16
  • 1970-01-01
  • 2014-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-20
  • 1970-01-01
相关资源
最近更新 更多