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