簡體   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