maryyyyyyy:
だから私は、配列の2セットを持っています:
$a = [
[
'position' => 0,
'color' => 'violet'
],
[
'position' => 2,
'color' => 'red'
],
[
'position' => 5,
'color' => 'green'
],
];
$b = [
[
'color' => 'yellow'
],
[
'color' => 'orange'
],
[
'color' => 'pink'
],
[
'color' => 'blue'
],
];
そして、私はこれから表示したいと、このようなものです:
array(7) {
[0]=>
array(1) {
["color"]=>
string(6) "violet"
}
[1]=>
array(1) {
["color"]=>
string(6) "yellow"
}
[2]=>
array(1) {
["color"]=>
string(3) "red"
}
[3]=>
array(1) {
["color"]=>
string(6) "orange"
}
[4]=>
array(1) {
["color"]=>
string(4) "pink"
}
[5]=>
array(1) {
["color"]=>
string(5) "green"
}
[6]=>
array(1) {
["color"]=>
string(4) "blue"
}
}
私は現在使用しているarray_splice
と、それは作業を行いますが、データの多くがありますたび、それは非常に遅いです。
array_splice
方法:
foreach($a as $val) {
array_splice($b, (int) $val['position'], 0, [['color' => $val['color']]]);
}
それでは、私がお聞きしたいのは、単に速いそれを作るために、このまたは任意の他の方法のためのPHP関数のようにありますか?
すべてのヘルプや提案をいただければ幸いです!
ありがとう!
アンドレアス:
この方法は、取得するにはarray_columnで「開始」を取得するために$使用しています[pos => color]
。
そして、Iループ行方不明のキーがある場合は$ Bから欠落しているキーの追加1つの項目がある場合は、この配列は、参照するには、他の再フォーマットから配列[post => color]
へ[['color' => color]]
$pos = array_column($a, "color", "position");
$count = count($pos) + count($b);
for($i=0; $i<$count-1; $i++){
if(!isset($pos[$i])){
$pos[$i] = array_splice($b, 0, 1);
}else{
$pos[$i] = [$pos[$i]];
}
}
ksort($pos);
var_dump($pos);
同じコードが、array_spliceなし。
$ Bから選択するどのような項目を知っているカウンタを使用しました。
$pos = array_column($a, "color", "position");
$count = count($pos) + count($b);
$j = 0;
for($i=0; $i<$count-1; $i++){
if(!isset($pos[$i])){
$pos[$i] = $b[$j];
$j++;
}else{
$pos[$i] = [$pos[$i]];
}
}
ksort($pos);
var_dump($pos);
しかし、これはインデックスを作成する$ Bが必要です。