array_splice以外の他の方法を使用して2つの配列を結合

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);

https://3v4l.org/3uPM3

しかし、これはインデックスを作成する$ Bが必要です。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=303527&siteId=1