我有一个状态报告数据库表,名为dsr
,它具有一些名为nlanestatus1,nlanestatus2 ...等的索引以及slanestatus1,slanestatus2 ...等。.
我一直在尝试通过
过滤这些值$array = array_filter($dsr, function($key) {
return strpos($key, 'lanestatus') === 0;
}, ARRAY_FILTER_USE_KEY);
我从另一个关于stackoverflow的问题中获取了这段代码,并且了解到通过在function($ key)中将0的值更改为1,我可以在尝试使用此代码后获得所需的密钥,但是我发现这功能不起作用。 我尝试将3等于2等于2,它只显示整个$ dsr数组。 PHP编码方面的任何帮助都将有所帮助。
解决该问题的另一种方法是更改mysql索引,但是系统已经在工作,更改它们可能会破坏它,因此这不是一种选择。
答案 0 :(得分:0)
strpos查找键在字符串中的位置。在这种情况下,它将在f.e中搜索“ lanestates”。 'nlanestatus2',该位置永远不会为0,因为0将是第一个位置。
如果您要使用strpos,这会解决
return strpos($key, 'lanestatus');
但是实际上您不需要$ key的位置,因此我建议使用strstr
return strstr($key, 'lanestatus');
答案 1 :(得分:-1)
怎么样:
$array = [];
foreach($dsr as $index) {
if(strpos($index, 'lanestatus') !== false) {
$array[] = $index;
}
}
答案 2 :(得分:-1)
将功能修改为:
$array = array_filter($dsr, function($key) {
return strpos($key, 'lanestatus') !== false;
}, ARRAY_FILTER_USE_KEY);
以您的情况
strpos($key, 'lanestatus') === 0;
表示您检查密钥是否以开头 lanestatus
。但是因为您的密钥是nlanestatus1
和slanestatus1
,所以它们永远不会以lanestatus
开头。
如果您100%确信lanestatus
前面是一个符号,则可以使用:
$array = array_filter($dsr, function($key) {
// check that position of `lanestatus` starts from position 1 in `$key`
return strpos($key, 'lanestatus') === 1;
}, ARRAY_FILTER_USE_KEY);