2つのPHP
アレイを3つ目にマージしたいのですが、それらを同じキーdata
に依存させたいと思います。私はdata
キーを2つの配列に持っています。私は最初にarray
に依存したい。最初の配列をfinal_array()
にロードし、次にESTYMACJA
を2番目のarray
から3番目のキーを追加しますが、同じdata
からdata
のキーをfinal_array()
にロードします。 final_array()
にdata
キーがない場合、アルゴリズムはfinal_array()
にこのキーを追加し、WYKONANIA
を追加し、ESTYMACJA
を追加する必要があります。可能であれば、私はESTYMACJA
をdata
の残りの部分にコピーしていたでしょう。私はfinal_array()
の期待の意味を示します。同じキーに応じてテーブルをマージする
第一の配列:
$my_array=[
['data'=>'2017-11-27','ESTYMACJA'=>5000],
['data'=>'2017-11-30','ESTYMACJA'=>9000]
];
第二の配列:
$new_array=[
['data'=>'2017-11-01','WYKONANIA'=>3],
['data'=>'2017-11-02','WYKONANIA'=>10],
['data'=>'2017-11-03','WYKONANIA'=>303],
['data'=>'2017-11-04','WYKONANIA'=>327],
['data'=>'2017-11-05','WYKONANIA'=>652],
['data'=>'2017-11-06','WYKONANIA'=>812],
['data'=>'2017-11-07','WYKONANIA'=>817],
['data'=>'2017-11-08','WYKONANIA'=>870],
['data'=>'2017-11-09','WYKONANIA'=>1070],
['data'=>'2017-11-10','WYKONANIA'=>1199],
['data'=>'2017-11-11','WYKONANIA'=>1206],
['data'=>'2017-11-12','WYKONANIA'=>1220],
['data'=>'2017-11-13','WYKONANIA'=>1421],
['data'=>'2017-11-14','WYKONANIA'=>1440],
['data'=>'2017-11-15','WYKONANIA'=>1904],
['data'=>'2017-11-16','WYKONANIA'=>1910],
['data'=>'2017-11-17','WYKONANIA'=>1962],
['data'=>'2017-11-18','WYKONANIA'=>2234],
['data'=>'2017-11-19','WYKONANIA'=>2305],
['data'=>'2017-11-20','WYKONANIA'=>2325],
['data'=>'2017-11-21','WYKONANIA'=>2250],
['data'=>'2017-11-22','WYKONANIA'=>2263],
['data'=>'2017-11-23','WYKONANIA'=>2821],
['data'=>'2017-11-24','WYKONANIA'=>2890],
['data'=>'2017-11-25','WYKONANIA'=>3411],
['data'=>'2017-11-26','WYKONANIA'=>3443],
['data'=>'2017-11-27','WYKONANIA'=>3501],
['data'=>'2017-11-28','WYKONANIA'=>4032]
];
final_array()期待:
Array
(
[0] => Array
(
[data] => 2017-11-01
[WYKONANIA] => 3
[ESTYMACJA] => 5000
)
[1] => Array
(
[data] => 2017-11-02
[WYKONANIA] => 10
[ESTYMACJA] => 5000
)
[2] => Array
(
[data] => 2017-11-03
[WYKONANIA] => 303
[ESTYMACJA] => 5000
)
[3] => Array
(
[data] => 2017-11-04
[WYKONANIA] => 327
[ESTYMACJA] => 5000
)
[4] => Array
(
[data] => 2017-11-05
[WYKONANIA] => 652
[ESTYMACJA] => 5000
)
[5] => Array
(
[data] => 2017-11-06
[WYKONANIA] => 812
[ESTYMACJA] => 5000
)
[6] => Array
(
[data] => 2017-11-07
[WYKONANIA] => 817
[ESTYMACJA] => 5000
)
[7] => Array
(
[data] => 2017-11-08
[WYKONANIA] => 870
[ESTYMACJA] => 5000
)
[8] => Array
(
[data] => 2017-11-09
[WYKONANIA] => 1070
[ESTYMACJA] => 5000
)
[9] => Array
(
[data] => 2017-11-10
[WYKONANIA] => 1199
[ESTYMACJA] => 5000
)
[10] => Array
(
[data] => 2017-11-11
[WYKONANIA] => 1206
[ESTYMACJA] => 5000
)
[11] => Array
(
[data] => 2017-11-12
[WYKONANIA] => 1220
[ESTYMACJA] => 5000
)
[12] => Array
(
[data] => 2017-11-13
[WYKONANIA] => 1421
[ESTYMACJA] => 5000
)
[13] => Array
(
[data] => 2017-11-14
[WYKONANIA] => 1440
[ESTYMACJA] => 5000
)
[14] => Array
(
[data] => 2017-11-15
[WYKONANIA] => 1904
[ESTYMACJA] => 5000
)
[15] => Array
(
[data] => 2017-11-16
[WYKONANIA] => 1910
[ESTYMACJA] => 5000
)
[16] => Array
(
[data] => 2017-11-17
[WYKONANIA] => 1962
[ESTYMACJA] => 5000
)
[17] => Array
(
[data] => 2017-11-18
[WYKONANIA] => 2234
[ESTYMACJA] => 5000
)
[18] => Array
(
[data] => 2017-11-19
[WYKONANIA] => 2305
[ESTYMACJA] => 5000
)
[19] => Array
(
[data] => 2017-11-20
[WYKONANIA] => 2325
[ESTYMACJA] => 5000
)
[20] => Array
(
[data] => 2017-11-21
[WYKONANIA] => 2250
[ESTYMACJA] => 5000
)
[21] => Array
(
[data] => 2017-11-22
[WYKONANIA] => 2263
[ESTYMACJA] => 5000
)
[22] => Array
(
[data] => 2017-11-23
[WYKONANIA] => 2821
[ESTYMACJA] => 5000
)
[23] => Array
(
[data] => 2017-11-24
[WYKONANIA] => 2890
[ESTYMACJA] => 5000
)
[24] => Array
(
[data] => 2017-11-25
[WYKONANIA] => 3411
[ESTYMACJA] => 5000
)
[25] => Array
(
[data] => 2017-11-26
[WYKONANIA] => 3443
[ESTYMACJA] => 5000
)
[26] => Array
(
[data] => 2017-11-27
[WYKONANIA] => 3501
**[ESTYMACJA] => 5000**
)
[27] => Array
(
[data] => 2017-11-28
[WYKONANIA] => 4032
[ESTYMACJA] => 5000
)
*[28] => Array
(
[data] => 2017-11-30
[WYKONANIA] => 4032
[ESTYMACJA] => 9000
)
このコードは、すでに私がやったが、イムは今立ち往生ものです。
$x = 0;
while ($x<count($final_array))
{
if ($new_array == null) {
break;
}
else {
for ($i = 0; $i < count($new_array); $i++) {
if ($final_array[$x]['data'] == ($new_array[$i]['data']) {
$final_array[$x]['WYKONANIA'] = $new_array['WYKONANIA'];
}
else {
array_push($final_array, "data", $new_array[$i]['data']);
array_push($final_array, "WYKONANIA", $new_array[$i]['WYKONANIA']);
array_push($final_array, "ESTYMACJA", $final_array[$x]['ESTYMACJA']);
}
}
}
$x++;
}
$myArray - first array
$new_array - second array
$final_array - final array.
foreachのは間違っている構文であり、あなたのロジックが間違っているのに役立ちます。 '$ final_array [$ x] ['data'] ==($ new_array [$ i] ['data'])'これは配列の一つのインデックスを比較するだけです。 $ final_array全体に一致するデータ値が含まれているかどうかを確認する必要があります。 – Devon
申し訳ありませんが、 'foreach'の代わりに' for'ループがあるはずです。私の間違い – Piecia1337
....デフォルトの 'ESTYMACJA'値は' $ my_array [0] ['ESTYMACJA'] '(' 5000 ')?デフォルトの 'WYKONANIA'値は' $ new_array'( '4032')の前の要素の' WYKONANIA'の値から来ますか?このロジックは非常に難しいです(私は今あなたの質問を何度も読んだことがあります)。このタスクのロジックを明確にして、デフォルト値の修正を決定してください。 – mickmackusa