繁体   English   中英

通过匹配键将二维数组与一维数组“同步” - PHP

[英]"Sync" 2D Array with 1D Array By matching Keys - PHP

我有以下两个数组:

一维数组:

$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"
         )
 );

我想要一个带有两个数组的函数,一个是 OneDimensional,另一个是 TwoDimensional。 它遍历 OneDimensional 数组的每个元素,并且对于这些元素中的每一个,它还遍历 TwoDimensional 数组的所有元素。 对于 TwoDimensional 数组的每个元素,它将 OneDimensional 数组的当前选定元素的键与 TwoDimensional 数组的当前选定元素的键进行比较。 如果这些键匹配,则函数将 OneDimensional Array 的当前选定元素的值写入 TwoDimensional 数组的当前选定元素。

对于最终结果,二维数组应该被保留(它的“实例”,可以这么说),但它的元素会根据来自一维数组的数据进行相应的更新。

编辑:我自己找到了答案,能否请您重新打开问题,以便我可以发布? :)

我做到了! 这是完成这项工作所需的功能:

  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 将在函数完成后自动接收更新。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM