Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP的快速方式;foreach“;多维关联数组的循环_Php_Multidimensional Array_Foreach_Associative Array - Fatal编程技术网

PHP的快速方式;foreach“;多维关联数组的循环

PHP的快速方式;foreach“;多维关联数组的循环,php,multidimensional-array,foreach,associative-array,Php,Multidimensional Array,Foreach,Associative Array,我有两个多维数组,分别称为$arrInitial和$arrFinal,我必须遍历每一个数组,以便用数组中列的值填充$arrFinal中的初始值列$arrInitial我拥有相同的国家和日期 我的foreach可以工作,但在我的用例中,这两个数组有数十万个值,这样代码运行太慢 有没有更快的方法 $arrInitial=array(array("Date"=>"01.05.2021", "Country"=>"USA&

我有两个多维数组,分别称为
$arrInitial
$arrFinal
,我必须遍历每一个数组,以便用数组中
列的值填充
$arrFinal
中的
初始值列
$arrInitial
我拥有相同的
国家和日期

我的
foreach
可以工作,但在我的用例中,这两个数组有数十万个值,这样代码运行太慢

有没有更快的方法

$arrInitial=array(array("Date"=>"01.05.2021", "Country"=>"USA","Initial_Am"=>25.5),
                array("Date"=>"02.05.2021", "Country"=>"USA","Initial_Am"=>30),
                array("Date"=>"01.05.2021", "Country"=>"UK","Initial_Am"=>10),
                array("Date"=>"02.05.2021", "Country"=>"UK","Initial_Am"=>15)
            );
$arrFinal=array(array("Date"=>"01.05.2021", "Country"=>"USA","Initial_Am"=>null,"Final_Am"=>30.5),
                array("Date"=>"02.05.2021", "Country"=>"USA","Initial_Am"=>null,"Final_Am"=>20),
                array("Date"=>"01.05.2021", "Country"=>"UK","Initial_Am"=>null,"Final_Am"=>25),
                array("Date"=>"02.05.2021", "Country"=>"UK","Initial_Am"=>null,"Final_Am"=>12),
                array("Date"=>"01.05.2021", "Country"=>"FR","Initial_Am"=>null,"Final_Am"=>18)
            );

foreach($arrFinal as $keyFin => $valueFin){
    foreach($arrInitial as $keyIni => $valueIni){
        if($valueIni['Date']==$valueFin['Date'] && $valueIni['Country']==$valueFin['Country']){
            $arrFinal[$keyFin]['Initial_Am']=$valueIni['Initial_Am'];
        }
    }
}
foreach
循环之后,数组
$arrFinal
将如下所示:

$arrFinal=array(array("Date"=>"01.05.2021", "Country"=>"USA","Initial_Am"=>25.5,"Final_Am"=>30.5),
                array("Date"=>"02.05.2021", "Country"=>"USA","Initial_Am"=>30,"Final_Am"=>20),
                array("Date"=>"01.05.2021", "Country"=>"UK","Initial_Am"=>10,"Final_Am"=>25),
                array("Date"=>"02.05.2021", "Country"=>"UK","Initial_Am"=>15,"Final_Am"=>12),
                array("Date"=>"01.05.2021", "Country"=>"FR","Initial_Am"=>null,"Final_Am"=>18)
            );

国家/地区+日期组合是否唯一?如果是这样的话,我会首先修改初始数组,这样它就可以使用这个组合作为数组键,然后您可以直接使用它进行“查找”,而不必每次都自己循环整个数组。(通过密钥直接访问通常比自己显式循环数据更快。)@CBroe是的,它是唯一的,但我认为不会有太大的区别。有没有办法只使用一个
foreach
?CBroe是100%正确的。这是在查找中建议“临时组合键”的页面的副本。例如,我看到了对这个问题的重新投票,好像在说,您没有看到所需的技术是如何以多种方式演示的。Spoonfeed:您使用的是不推荐的、不安全的、不受支持的php版本。如果你的雇主不允许你使用现代php,告诉他们你会在其他地方找到更好的工作。。。将方括号语法更改为旧的skool
数组(
语法。