我已将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);
这种方法令我头疼。是否有一个明显的解决方案可以将其重构为php的本机数组函数,或者是一堆不可避免的显式循环?
答案 0 :(得分:0)
没有任何本机功能可以执行您想要的操作。将CSV文件中的信息存储到数据库中有什么问题?
如果这不是一个选项,那么尝试foreach
循环,它们会更清洁。
$spend = array();
foreach ($table['spend'] as $key => $amount)
{
if ($table['status'][$key] == 'active' && $table['plan'][$key] == 'weekly')
{
$spend[] = $amount;
}
}
虽然它没有解决循环问题,但它确实有助于清理它们,所以你不要太过于失去理智。
答案 1 :(得分:0)
使用Array Keys获取所有&#34;有效&#34;键,然后只遍历那些找到匹配。
$keys = array_keys($table['status'], 'active');
foreach($keys as $key)
{
if($table['plan'][$key] == 'weekly')
{
$spend[] = $table['spend'][$key];
}
}
print_r($spend);
支出: 排列 ( [0] =&gt; 19000 )
答案 2 :(得分:0)
这非常混乱,但我找到了一种方法
$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']));