【发布时间】:2019-01-23 16:41:17
【问题描述】:
我的函数出现了非常奇怪的 PHP 行为,该函数允许在关联数组的数组中搜索以查找具有可搜索值的键的数组。
我的 PHP 代码:
<?php
// Test array - results from database
$test_array[0] = array('period' => '2018', 'payment_type' => 'Direct Debit', 'value' => 0);
$test_array[1] = array('period' => '2018', 'payment_type' => 'Manual', 'value' => 20.85);
$test_array[2] = array('period' => '2018', 'payment_type' => 'Credit Debit Card', 'value' => 0);
// Function to find subarrays by payment type
function searchReportArrayForKeyValue($array, $searchvalue) {
$result_array = Array();
for($i = 0; $i < count($array); ++$i) {
$array_inside = $array[$i];
$keys = array_keys($array_inside);
for($j = 0; $j < count($array_inside); ++$j) {
$value = $array_inside[$keys[$j]];
if($value == $searchvalue) {
$result_array = $array_inside;
}
}
}
return $result_array;
}
var_dump(searchReportArrayForKeyValue($test_array, 'Direct Debit'));
var_dump(searchReportArrayForKeyValue($test_array, 'Manual'));
var_dump(searchReportArrayForKeyValue($test_array, 'Credit Debit Card'));
?>
如果我运行此代码,我应该返回 3 个不同的数组(测试数组中的 0、1、2 个键),但是所有三个函数调用都返回“信用卡借记卡”数组键:http://take.ms/hZfec(屏幕截图)。 但是,如果我将 'value' => 0 更改为某个浮点数/整数,所有这些都可以按预期工作,例如,如果我将测试数组更改为此:
$test_array[0] = array('period' => '2018', 'payment_type' => 'Direct Debit', 'value' => 11.2);
$test_array[1] = array('period' => '2018', 'payment_type' => 'Manual', 'value' => 20.85);
$test_array[2] = array('period' => '2018', 'payment_type' => 'Credit Debit Card', 'value' => 10.5);
我的三个函数调用返回了 3 个正确的不同子数组:http://take.ms/SSTu1(屏幕截图)
为什么会这样? “价值”中的零如何打破数组迭代?我的函数出了什么问题?
P.S.:以前我在代码中有“for each”,并将其更改为“for”以确保此问题与“for each”中的“for each”中的指针重置无关,但这没有帮助这种情况。
【问题讨论】:
-
你试过
===if($value === $searchvalue) { -
是否有充分的理由不在数据库中执行此操作?为什么要将整个表结果保存在 PHP 内存中,在那里模拟
WHERE子句? -
你的实际意图是什么? (XY problem)