如何筛选SQL数组的索引并显示它们...?

时间:2019-09-20 09:20:14

标签: php arrays key

我有一个状态报告数据库表,名为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索引,但是系统已经在工作,更改它们可能会破坏它,因此这不是一种选择。

3 个答案:

答案 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。但是因为您的密钥是nlanestatus1slanestatus1,所以它们永远不会以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);