[英]"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.