使用php组合单个和多维数组


Combine single and multidimensional array using php

我有两个数组,我想匹配这两个数组。如果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);
  1. 排序$weeksArr

  2. 对$dailyArr进行排序,使得$dailyArr[i][0]<=$dailyArr[i+1][0]

  3. 用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

  1. 如果i或j出界,取消循环

环路

  1. 如果i小于$weekArr的长度,则将剩余条目添加到$finalArr