私は3つの配列を持っています:
array(1, 5, 1);
array(3, 2, 7, 5 ,4);
array(4, 3, 6, 5)
それらをマージしてそのような結果を得たい:
array(
array(1, 3, 4),
array(5, 2, 3),
array(1, 7, 6),
array(5, 5),
array(4)
);
最も簡単な方法は何ですか?
私は3つの配列を持っています:
array(1, 5, 1);
array(3, 2, 7, 5 ,4);
array(4, 3, 6, 5)
それらをマージしてそのような結果を得たい:
array(
array(1, 3, 4),
array(5, 2, 3),
array(1, 7, 6),
array(5, 5),
array(4)
);
最も簡単な方法は何ですか?
$arrs = array(
array(1, 5, 1),
array(3, 2, 7, 5, 4),
array(4, 3, 6, 5),
);
$result = array();
$num_arrs = count($arrs);
for($i = 0; $i < $num_arrs; $i++){
$size = count($arrs[$i]);
for($j = 0; $j < $size; $j++){
if(!isset($result[$j]))
$result[$j] = array();
$result[$j][] = $arrs[$i][$j];
}
}
最新バージョンの PHP (5.5) を使用していると仮定すると、これを使用できます。
$input = array(
array(1,5,1),
array(3,2,7,5,4),
array(4,3,6,5)
);
$output = array_column($input,null);
最新バージョンを持っていない場合は、shimの元の PHP バージョンを参照してください。
または、この特定のケース (つまり、特殊なシム) については、これを試してください。
$input = array(...); // see code block above
$output = array();
foreach($input as $arr) foreach($arr as $i=>$v) $output[$i][] = $v;
$arrays = array(
array(1, 5, 1),
array(3, 2, 7, 5 ,4),
array(4, 3, 6, 5)
);
$combined = array();
foreach($arrays as $array) {
foreach($array as $index => $val) {
if(!isset($combined[$index])) $combined[$index] = array();
$combined[$index][] = $val;
} }
その後、$combined
あなたが望むものを保持します。
これは、あなたの望むことですか?
使用できますarray_map
<?php
$a = array( 1, 5, 1 );
$b = array( 3, 2, 7, 5 ,4 );
$c = array( 4, 3, 6, 5 );
$d = array_map( function() {
return array_filter( func_get_args() );
}, $a, $b, $c );
print_r( $d );
?>
出力
Array
(
[0] => Array
(
[0] => 1
[1] => 3
[2] => 4
)
[1] => Array
(
[0] => 5
[1] => 2
[2] => 3
)
[2] => Array
(
[0] => 1
[1] => 7
[2] => 6
)
[3] => Array
(
[1] => 5
[2] => 5
)
[4] => Array
(
[1] => 4
)
)