繁体   English   中英

PHP数组结合问题

[英]php array combine problems

假设我在PHP中有以下4个数组:

$a1 = array('a','b');
$a2 = array('1','2');
$b1 = array('a','c');
$b2 = array('3','4');

我想要这样的结果:

$header = array('a','b','c');
$row1 = array('1','2',NULL);  //value from a2 where value from $a1 is same with $header
$row2 = array('3',NULL,'4');  //value from b2 where value from $b1 is same with $header

我可以使用$header = array_unique(array_merge($a1,$b1));创建$header $header = array_unique(array_merge($a1,$b1)); 但是如何创建row1和row2?

$a1 = array('a','b');
$a2 = array('1','2');
$b1 = array('a','c');
$b2 = array('3','4');

$header = array_unique(array_merge($a1, $b1));

$advancedArrayCreator = function($header, $h, $d) {
    return array_map(function($column) use($h, $d) {
        $key = array_search($column, $h);
        if ($key !== false) {
            return $d[$key];
        }
    }, $header);
};

$row1 = $advancedArrayCreator($header, $a1, $a2);
$row2 = $advancedArrayCreator($header, $b1, $b2);

var_dump($row1, $row2);

演示: http//ideone.com/JkSl1i

您可以通过组合一些array_*函数来实现

(无循环,无匿名函数)

function create_row($header, $h, $d) {
  return array_values(array_merge(array_fill_keys($header, null), array_combine($h, $d)));
}

$a1 = array('a','b');
$a2 = array('1','2');
$b1 = array('a','c');
$b2 = array('3','4');

$header = array_unique(array_merge($a1, $b1));
$row1 = create_row($header, $a1, $a2);
$row2 = create_row($header, $b1, $b2);

var_dump($row1, $row2);

演示

    foreach($header as $h)
    {
         if(array_search($h,$a1)===FALSE) {}   
         $row1[] = $a2[array_search($h,$a1)];
    }

    foreach($header as $h)
    {
            if(array_search($h,$b1)===FALSE) {}
            $row2[] = $b2[array_search($h,$b1)];
    }

试试这个代码:

$a1 = array('a','b');
$a2 = array('1','2');
$b1 = array('a','c');
$b2 = array('3','4');
$header = array_unique(array_merge($a1,$b1));
$row1 = array();    
foreach($header as $k => $v) {
  $result = array_search($v, $a1);
  if($result === FALSE) {
    $row1[$k] = null;
  } else {
    $row1[$k] = $a2[$k];
  }
}
var_dump($row1); // similar for $row2

哪个输出:

array(3) { [0]=> string(1) "1" [1]=> string(1) "2" [3]=> NULL }

解决此问题:

$header = array_unique(array_merge($a1,$b1));

foreach ($header as $k => $v)
{
  $i = array_search($v, $a1);
  if (isset($i))
     $row1[$i] = $a2[$i];
  unset ($i);
  $i = array_search($v, $b1);
  if (isset($i))
    $row2[$i] = $b2[$i];
  unset ($i);   
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM