我有两个数组,我想匹配这两个数组。如果array 1
的值不存在于array 2
中,那么我想为该元素放置0
。
阵列1
$weeksArr = array("p1","p2","p3","p4");
阵列2
$dailyArr = array(
"0"=>array("p1","123"),
"1"=>array("p2","125"),
"2"=>array("p4","126")
);
加入后,我希望最后的阵列是
$finalArr = array(
"0"=>array("p1","123"),
"1"=>array("p2","125"),
"2"=>array("p3","0"),
"3"=>array("p4","126")
);
所以我想在最终数组中插入p3
。
欢迎任何提示/建议。提前谢谢。
我不知道去那里的最短方法,但你可以先得到所有的p,然后与几周进行比较。
在得到差异后,循环一次赋值,最后再次对它们进行排序。
$weeksArr = array("p1","p2","p3","p4");
$dailyArr = array("0"=>array("p1","123"),"1"=>array("p2","125"),"2"=>array("p4","126"));
$finalArr = $dailyArr;
$temp = array_map(function($piece){ return $piece[0]; }, $finalArr); // get all p's
$diff = array_diff($weeksArr, $temp); // get the missing p
foreach($diff as $w) {
$finalArr[] = array($w, 0); // assign missing p
}
usort($finalArr, function($a, $b){ // you do not need this is you do not care about the order
return strcmp($a[0], $b[0]); // if you need to order them, p1, p2, p3, p4, then i guess you need to sort
});
echo '<pre>';
print_r($finalArr);
这比我想象的要复杂一些,但这个简单的嵌套foreach循环会使它:
$weeksArr = array("p1","p2","p3","p4");
$dailyArr = array("0"=>array("p1","123"),"1"=>array("p2","125"),"2"=>array("p4","126"));
foreach ($weeksArr as $i => $value) {
foreach ($dailyArr as $a) {
if ($a[0] == $value) $finalArray[$i] = array($a[0],$a[1]);
}
if (!isset($finalArray[$i])) $finalArray[$i] = array($value,0);
}
var_dump($finalArray);
-
排序$weeksArr
-
对$dailyArr进行排序,使得$dailyArr[i][0]<=$dailyArr[i+1][0]
-
用0初始化两个变量i,j,用空数组初始化$finalArray
做
4.a如果$weeksArr[i]等于$dailyArr[j][0],则将$dailyAR[j]添加到$finalArr,并递增i和j
4.b如果$weeksArr[i]<dailyArr[j][0],为$weekArr[i]向$finalArr添加一个新条目,并增加i
- 如果i或j出界,取消循环
环路
- 如果i小于$weekArr的长度,则将剩余条目添加到$finalArr