【发布时间】: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