如何从SQL结果中筛选行数组



当我打印$results时,我会得到下面的数组,我想过滤它,并将它的一部分用于不同的输出

$stmt = $sqlselect->fetchAll(PDO::FETCH_ASSOC);
$results = [];
foreach ($stmt as $key => $value) {  
$results[$key] = $value;
}
print_r($results);
Array
(
[0] => Array
(
[id] => 2
[employee] => 1
[startdate] => 2022-02-01
[enddate] => 2022-02-28
[evaluatedby] => 
[evaluationdate] => 
[evaluation] => 
[submitted] => 0
[attachment] => 
[jobtitle] => Software Developer
[department] => Planning & Development
[knownas] => Mike
)

[1] => Array
(
[id] => 2
[employee] => 1
[startdate] => 2022-02-01
[enddate] => 2022-02-28
[evaluatedby] => 
[evaluationdate] => 
[evaluation] => 
[submitted] => 0
[attachment] => 
[jobtitle] => Administrator
[department] => Accounts
[knownas] => Mike
)
)

我想破坏/过滤$results,使其看起来像下面的数组,这样我就可以在代码的不同部分使用它。

Array
(
[0] => Array
(
[knownas] => mike
[department] => Planning & Development
[jobtitle] => Software Developer
[id] => 2
[startdate] => 2022-02-01
[enddate] => 2022-02-28
)
[1] => Array
(
[knownas] => Mike
[department] => Accounts
[jobtitle] => Administrator
[id] => 2
[startdate] => 2022-02-01
[enddate] => 2022-02-28
)
)

我试过了。

$array = ['name','department','jobtitle','id','startdate','enddate'];
$filterarray[] = array_filter($results, function($key) use ($array)
{ 
return in_array(array('name','department','jobtitle','id','startdate','enddate'),$key);
});
print_r(json_encode($filterarrays));

当我运行它时,它返回一个空数组。是我绕过这件事的方法。

这里有一些问题。

首先,如果您已经将数组作为变量传递,那么您可以简单地使用该变量。

其次,in_array()将第一个变量作为针(在您的情况下是关键(,将第二个变量作为haystack(在您情况下是数组(

第三,array_filter中缺少ARRAY_FILTER_USE_KEY,因此函数尝试根据值而不是键进行筛选。

你的代码应该是这样的:

$array = ['name','department','jobtitle','id','startdate','enddate'];
$filterarray[] = array_filter($results, function($key) use ($array)
{ 
return in_array($key, $array);
}, ARRAY_FILTER_USE_KEY);

我认为您可能实际上想要在内部使用array_map,然后使用array_filter。请参阅下面的代码示例,但也可以在此处查看答案,以了解两者的更多详细信息:https://stackoverflow.com/a/3432266/1428907

$newArray = array_map(static function (array $result) {
return array_filter($result, fn($key) => in_array($key, ['name','department','jobtitle','id','startdate','enddate']), ARRAY_FILTER_USE_KEY);
}, $results);

最新更新