使用本机php数组函数查询二维数组

使用本机php数组函数查询二维数组,php,sql,arrays,sorting,Php,Sql,Arrays,Sorting,我已将CSV转换为二维数组,其中以下数组结构存储列和行数据 $table['status'] = ['active', 'active', 'inactive']; $table['plan'] = ['annual', 'weekly', 'weekly ']; $table['spend'] = ['12,000', '19,000', '0' ]; print_r($table); 内容如下: ( [status] => Array ( [0] => a

我已将CSV转换为二维数组,其中以下数组结构存储列和行数据

$table['status'] = ['active', 'active', 'inactive'];
$table['plan']   = ['annual', 'weekly', 'weekly  '];
$table['spend']  = ['12,000', '19,000', '0'       ];

print_r($table);
内容如下:

( [status] => Array ( [0] => active [1] => active [2] => inactive ) 
  [plan] => Array ( [0] => annual [1] => weekly [2] => weekly ) 
  [spend] => Array ( [0] => 12,000 [1] => 19,000 [2] => 0 ) )
我想使用原生PHP数组函数来查询数组,而不必编写带有嵌套条件的循环。如果这是一个MySQL数据库,并且我想从具有活动状态和每周计划的帐户中查找支出总额,那么我只需运行以下查询

SELECT SUM('Spend') FROM table WHERE status = 'Active' AND plan = 'Weekly';
但是我必须使用for循环采用以下方法

for ($index = 1; $index < count($table); $index++){
    if (($table['status'][$index] == 'active') && ($table['plan'][$index] == 'weekly')){
        $spend[$index] = $table['spend'][$index];
    }
}

echo array_sum($spend);
for($index=1;$index

这种方法让我头疼。是否有一个明显的解决方案可以将其重构为php的本机数组函数,还是不可避免地会出现一堆显式循环?

没有任何本机函数可以满足您的需要。将CSV文件中的信息存储到数据库中有什么问题

如果这根本不是一个选项,那么尝试
foreach
循环,它们会更干净

$spend = array();
foreach ($table['spend'] as $key => $amount)
{
    if ($table['status'][$key] == 'active' && $table['plan'][$key] == 'weekly')
    {
        $spend[] = $amount;
    }
}
虽然它不能解决循环问题,但它确实有助于清理循环,这样你就不会太失去理智。

使用获取所有“活动”键,然后仅循环那些键以查找匹配项

$keys = array_keys($table['status'], 'active');

foreach($keys as $key)
{
    if($table['plan'][$key] == 'weekly')
    {
        $spend[] = $table['spend'][$key];
    }
}
print_r($spend);
花费: 排列 ( [0] => 19,000
)

这很麻烦,但我找到了一种方法

$keys = array_intersect(array_keys($table['status'], 'active'), array_keys($table['plan'], 'weekly'));
$subs['total'] = array_intersect_key($table['spend'], array_flip($keys));

print_r(array_sum($subs['total']));

csv数据是否必须采用这种格式?可以将其转换为行列表:$table=array(array(active=>1,'plan'=>weekly','spend'=>12000),array(…),然后使用array\u filter提取所需的行。我正在考虑这种格式。你能提供一个具有这种数组结构的array\u filter解决方案的示例吗?php中的查询模拟是echo array\u sum(array\u intersect\u key)($table['spend']、array_flip(array_intersect(array_key($table['status']、'active')、array_key($table['plan']、'weekly'))));但您必须将数字格式转换为19000。或者添加更多函数:)