Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.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
&引用;同步“;2D数组与匹配键的1D数组-PHP_Php_Arrays - Fatal编程技术网

&引用;同步“;2D数组与匹配键的1D数组-PHP

&引用;同步“;2D数组与匹配键的1D数组-PHP,php,arrays,Php,Arrays,我有以下两个阵列: 一维数组: $oneDimArray= array( "id" => 1, "internal_key" => "TESTKEY_1", "CPU" => "intelTest1", "GPU" => "nvidiaTest1", "Soundcard" => "AsusTest1" "MAC" =&

我有以下两个阵列:

一维数组:

$oneDimArray= array( 
            "id" => 1,
            "internal_key" => "TESTKEY_1",
            "CPU" => "intelTest1",
            "GPU" => "nvidiaTest1", 
            "Soundcard" => "AsusTest1"
            "MAC" => "macTest1",
            "IP" => "ipTest1",
            "VLAN" => "vlanTest1"
            );
$twoDimArray= array( 
                    "id" => 1,
                    "internal_key" => "TESTKEY_2",
                    "nestedArray1" => array (
                                             "CPU" => "intelTest1",
                                             "GPU" => "nvidiaTest2",   
                                             "Soundcard" => "AsusTest1"
          ),

                    "nestedArray2" => array (
                                             "MAC" => "macTest2",
                                             "IP" => "ipTest1",
                                             "VLAN" => "vlanTest1"
         )
 );
和一个二维数组:

$oneDimArray= array( 
            "id" => 1,
            "internal_key" => "TESTKEY_1",
            "CPU" => "intelTest1",
            "GPU" => "nvidiaTest1", 
            "Soundcard" => "AsusTest1"
            "MAC" => "macTest1",
            "IP" => "ipTest1",
            "VLAN" => "vlanTest1"
            );
$twoDimArray= array( 
                    "id" => 1,
                    "internal_key" => "TESTKEY_2",
                    "nestedArray1" => array (
                                             "CPU" => "intelTest1",
                                             "GPU" => "nvidiaTest2",   
                                             "Soundcard" => "AsusTest1"
          ),

                    "nestedArray2" => array (
                                             "MAC" => "macTest2",
                                             "IP" => "ipTest1",
                                             "VLAN" => "vlanTest1"
         )
 );
我想要一个包含两个数组的函数,一个是一维数组,另一个是二维数组。 它迭代一维数组的每个元素,对于这些元素中的每个元素,它也迭代二维数组的所有元素。 对于二维数组的每个元素,它将一维数组的当前选定元素的键与二维数组的当前选定元素的键进行比较。 如果这些键匹配,函数会将一维数组的当前选定元素的值写入二维数组的当前选定元素

对于最终结果,应该保留二维数组(也就是说它的“实例”),但使用来自一维数组的数据相应地更新其元素

编辑:我自己找到了答案,请你重新打开问题,我可以发布它吗?:)

我成功了! 以下是执行此项工作所需的功能:

  public function recursiveUpdateArray($b1, &$b2, $b1val = null){
    /**
    *
    * @param  array $b1 -> One-Dimensional Array
    * @param  array $b2 as reference -> Two-Dimensional Array or Model which then gets converted to array
    * @param  string $b1val -> currently selected value of $b1 array before recursion
    *
    *
    ***/

    if(!is_array($b2)){
      $b2 = $b2->toArray();
    }


    if(is_array($b1)){
      foreach($b1 as $bkeyOneDimensional => $bvalOneDimensional){
        foreach($b2 as $bkeyTwoDimensional => &$bvalTwoDimensional){

          if(is_array($bvalTwoDimensional)){
             $this->recursiveUpdateArray($bkeyOneDimensional, $bvalTwoDimensional, $bvalOneDimensional);
          }elseif($bkeyOneDimensional === $bkeyTwoDimensional){
            $bvalTwoDimensional = $bvalOneDimensional;
          }
        }
      }
    }elseif(is_string($b1) && is_array($b2)){
      foreach($b2 as $b2key => &$b2val){
        if($b1 === $b2key){
          $b2val = $b1val;
        }
      }
    }

  }
以下是您在工作流程中如何调用它:

recursiveUpdateArray($oneDimArray, $toBeUpdatedTwoDimArray);

由于该函数将您的
$toBeUpdatedTwoDimArray
作为参考,您无需返回任何内容,twoDimArray将在函数完成后自动接收更新。

首先,这不是代码编写服务。你有没有尝试向我们展示?你到底想在这里“比较”什么?如果你说数据应该更新-然后覆盖它,那么在哪一点上需要比较任何东西?这看起来几乎是两个小时前你问的问题的副本。@04FS那么,有什么方便的内置php方法可以用1D数组覆盖2D数组吗?如果是这样,请告诉我,我会使用它。但是如果没有,那么我需要通过它们的键和值来比较元素,否则任何元素值都将写入任何元素值,完全混淆数据结构。此外,如果能够实现可选目标,也能成功地从1D数组更新2D数组,并且非数组元素比2D数组少,那就太好了。@04FS是的,问题围绕着同一个问题,但他们从不同的角度提出问题。第一个是在拉威尔及其雄辩的ORM的背景下寻求解决方案。这里的第二个要用普通php解决这个问题。我没有收到任何关于我的第一个答案,因此我认为没有人有知识提供给我一个答案利用拉拉维尔和雄辩。但可能还有人可以帮助我使用普通php,这就是我提出这个问题的原因。