我有以下数组:
$entrate=Array
(
0 => Array(
'id' => 1,
'nome' => 'Stipendio',
'datamov' => '2023-04-15',
'mese' => 4,
'anno' => 2023,
'total_mov' => 3000.00
),
1 => Array(
'id' => 1,
'nome' => 'Stipendio',
'datamov' => '2023-03-15',
'mese' => 3,
'anno' => 2023,
'total_mov' => 3000.00
),
2 => Array(
'id' => 1,
'nome' => 'Stipendio',
'datamov' => '2023-02-15',
'mese' => 2,
'anno' => 2023,
'total_mov' => 3000.00
),
3 => Array(
'id' => 1,
'nome' => 'Stipendio',
'datamov' => '2023-01-15',
'mese' => 1,
'anno' => 2023,
'total_mov' => 3000.00
)
);
我想通过返回第一级数组的键的 datamov 值进行搜索。 因此,在寻找“2023-03-15”时,我希望得到返回 1 的结果。
我尝试这样做:
$anno_start='2023';
$mese_start='01';
$end='2023-12-31';
$datemovs=array_column($entrata, 'datamov');
while (strtotime($anno_start . '-' . $mese_start . '-01') < strtotime($end)) {
$mese_start_num = ltrim($mese_start, '0');
$searched_date=$anno_start.'-'.$mese_start.'-15';
echo 'looking for '.$searched_date;
if($found_key = array_search($searched_date, $datemovs)!==NULL){
echo ' found this key '.$found_key;
$datatrovata = $entrata[$found_key]['datamov'];
echo " that matches $datatrovata \n";
}else{
echo " and I found nothing";
}
$mese_start_num = $mese_start_num + 1;
if ($mese_start_num > 12) {
$anno_start = $anno_start + 1;
$mese_start_num = 1;
$mese_start='01';
}
if($mese_start_num<10){$mese_start='0'.$mese_start_num;}else{$mese_start=$mese_start_num;}
}
但它给了我:
查找 2023-01-15 找到了与 2023-03-15 匹配的键 1
查找 2023-02-15 找到了与 2023-03-15 匹配的键 1
查找 2023-03-15 找到了与 2023-03-15 匹配的键 1
查找 2023-04-15 找到了与 2023-03-15 匹配的键 1
查找 2023-05-15 找到了与 2023-03-15 匹配的键 1
查找 2023-06-15 找到了与 2023-03-15 匹配的键 1
查找 2023-07-15 找到了与 2023-03-15 匹配的键 1
查找 2023-08-15 找到了与 2023-03-15 匹配的键 1
查找 2023-09-15 找到了与 2023-03-15 匹配的键 1
查找 2023-10-15 找到了与 2023-03-15 匹配的键 1
查找 2023-11-15 找到了与 2023-03-15 匹配的键 1
查找 2023-12-15 找到了与 2023-03-15 匹配的键 1
这显然是错误的。我错过了什么?
我的目标是最终
查找 2023-01-15 发现此键 3 与 2023-01-15 匹配,total_mov 为 3000
查找 2023-02-15 发现此键 2 与 2023-02-15 匹配,total_mov 为 3000
查找 2023-03-15 发现此键 1 与 2023-03-15 匹配,total_mov 为 3000
查找 2023-04-15 发现此键 0 与 2023-04-15 匹配,total_mov 为 3000
寻找2023-05-15但没有找到
寻找 2023-06-15 但没有找到
寻找2023-07-15但没有找到
寻找 2023-08-15 但没有找到
寻找2023-09-15但没有找到
寻找2023-10-15,没有找到
寻找2023-11-15,没有找到
寻找2023-12-15,没有找到
我认为你应该修复这部分:
if($found_key = array_search($searched_date, $datemovs)!==NULL){
到这个:
$found_key = array_search($searched_date, $datemovs);
if($found_key !== false){
以下是完整部分:
while (strtotime($anno_start . '-' . $mese_start . '-01') < strtotime($end)) {
$mese_start_num = ltrim($mese_start, '0');
$searched_date=$anno_start.'-'.$mese_start.'-15';
$found_key = array_search($searched_date, $datemovs);
if($found_key !== false){ // <-- THIS ROW
echo ' found this key '.$found_key;
$datatrovata = $entrata[$found_key]['datamov'];
echo " that matches $datatrovata \n";
}else{
echo " and I found nothing";
}
$mese_start_num = $mese_start_num + 1;
if ($mese_start_num > 12) {
$anno_start = $anno_start + 1;
$mese_start_num = 1;
$mese_start='01';
}
if($mese_start_num<10){$mese_start='0'.$mese_start_num;}else{$mese_start=$mese_start_num;}
}
因为
array_search
函数返回与搜索值匹配的第一个元素的键,所以它总是返回一个值,即使在数组中找不到该值。