0


0

私は配列があります:

配列([1] => 25 [2] => 50 [3] => 25)

私はそれを作りたいと思います:

配列([1] => 50 [2] => 50)

これを行うには、中間値を1と3の間で分割します。 これは最も単純な例で、分割は50,50です。 私は15要素の配列を6つの要素にすることができたいと思います。

何か案は?

その他の例[10、15、20、25] 2つの要素に減らした:25(10 15)、45(20 25)[10、10、10、10、11] 2つの要素に減らした:25(10 10(10 / 2)、26((10/2)10 11)

3 Answer


1


Peterのソリューションで追加のテストを行った後、サイズの縮小が奇数であると期待していたものが得られないことに気付きました。 これが私が思いついた機能です。 要求されたサイズよりも小さいデータセットも膨張します。

$ c){$ x = ceil($ r / $ c); $ temp = array(); ($ i = 0; $ i <$ x; $ i)$ temp [] = $ v;($ data = $ v)のforeach $ data = $ temp; $ c = count($ data); }

//($ c> $ r){$ temp = array(); ($ i = 0; $ i <$ r; $ i)$ temp [] = $ v;($ data = $ v)のforeach $ data = array_map( 'array_sum'、array_chunk($ temp、$ c)); foreach($ data = $ k => $ v)$ data [$ k] = $ v / $ r; $ dataを返します。 }


0


array_sum()を使用して値を合計してから、結果として得られる配列に含める要素の数に応じて、その合計を除算し、除算の結果を維持したいすべての要素を埋めます。

(ここでは、2番目の配列を使用することを想定していますが、そのようにしたい場合は不要な配列を設定解除することができます)。


0


これがあなたの問題に対する私の突き刺しです

store = $ data; $ this-> universe = array_sum($ data); }

public function reduceTo($ size){//縮小サイズが大きすぎる場合のガード条件。$ storeSize = count($ this-> store); if($ size> = $ storeSize){return $ this-> store; }

//($ storeSizeの場合、奇数個の要素を異なる方法で処理する必要があります

$ chunked = array_chunk(array_merge($ chunked [0]、$ chunked [1])、floor($ storeSize / $ size));

//他の値の間に奇数人を分配する($ chunkedとして

array_map( 'array_sum'、$ chunked)を返します。 }

}

$ tests = array(array(2、array(25、50、25))、array(2、array(10、15、20、25))、array(2、array(10、10、10、10、11) ))、配列(6、array_fill(0、15、1)))。

foreach($ testを$ testとして){$ t = new Thingy($ test [1]); print_r($ t-> reduceTo($ test [0])); }

?