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