1

6 つの配列があり、各配列に 6 つの値 (ゼロではない) があり、ループごとに 3 つの配列がゼロ値であると仮定して方程式をテストしたい場合、どうすればそれを行うことができますか?

例:

私はこれらの6つの配列を持っています:

$row_1 = array(a => 1, b => 2, c => 3, d => 4, e => 5, f => 6);
$row_2 = array(a => 1, b => 2, c => 3, d => 4, e => 5, f => 6);
$row_3 = array(a => 1, b => 2, c => 3, d => 4, e => 5, f => 6);
$row_4 = array(a => 1, b => 2, c => 3, d => 4, e => 5, f => 6);
$row_5 = array(a => 1, b => 2, c => 3, d => 4, e => 5, f => 6);
$row_6 = array(a => 1, b => 2, c => 3, d => 4, e => 5, f => 6);

ループ 1:

$row_1 = array(a => 0, b => 0, c => 0, d => 0, e => 0, f => 0);
$row_2 = array(a => 0, b => 0, c => 0, d => 0, e => 0, f => 0);
$row_3 = array(a => 0, b => 0, c => 0, d => 0, e => 0, f => 0);
$row_4 = array(a => 1, b => 2, c => 3, d => 4, e => 5, f => 6);
$row_5 = array(a => 1, b => 2, c => 3, d => 4, e => 5, f => 6);
$row_6 = array(a => 1, b => 2, c => 3, d => 4, e => 5, f => 6);

ループ 2:

$row_1 = array(a => 1, b => 2, c => 3, d => 4, e => 5, f => 6);
$row_2 = array(a => 0, b => 0, c => 0, d => 0, e => 0, f => 0);
$row_3 = array(a => 0, b => 0, c => 0, d => 0, e => 0, f => 0);
$row_4 = array(a => 0, b => 0, c => 0, d => 0, e => 0, f => 0);
$row_5 = array(a => 1, b => 2, c => 3, d => 4, e => 5, f => 6);
$row_6 = array(a => 1, b => 2, c => 3, d => 4, e => 5, f => 6);

ループ 3:

$row_1 = array(a => 1, b => 2, c => 3, d => 4, e => 5, f => 6);
$row_2 = array(a => 1, b => 2, c => 3, d => 4, e => 5, f => 6);
$row_3 = array(a => 0, b => 0, c => 0, d => 0, e => 0, f => 0);
$row_4 = array(a => 0, b => 0, c => 0, d => 0, e => 0, f => 0);
$row_5 = array(a => 0, b => 0, c => 0, d => 0, e => 0, f => 0);
$row_6 = array(a => 1, b => 2, c => 3, d => 4, e => 5, f => 6);

ループ 4:

$row_1 = array(a => 1, b => 2, c => 3, d => 4, e => 5, f => 6);
$row_2 = array(a => 1, b => 2, c => 3, d => 4, e => 5, f => 6);
$row_3 = array(a => 1, b => 2, c => 3, d => 4, e => 5, f => 6);
$row_4 = array(a => 0, b => 0, c => 0, d => 0, e => 0, f => 0);
$row_5 = array(a => 0, b => 0, c => 0, d => 0, e => 0, f => 0);
$row_6 = array(a => 0, b => 0, c => 0, d => 0, e => 0, f => 0);

ループ 5:

$row_1 = array(a => 0, b => 0, c => 0, d => 0, e => 0, f => 0);
$row_2 = array(a => 0, b => 0, c => 0, d => 0, e => 0, f => 0);
$row_3 = array(a => 1, b => 2, c => 3, d => 4, e => 5, f => 6);
$row_4 = array(a => 0, b => 0, c => 0, d => 0, e => 0, f => 0);
$row_5 = array(a => 1, b => 2, c => 3, d => 4, e => 5, f => 6);
$row_6 = array(a => 1, b => 2, c => 3, d => 4, e => 5, f => 6);

ループ 6:

$row_1 = array(a => 0, b => 0, c => 0, d => 0, e => 0, f => 0);
$row_2 = array(a => 0, b => 0, c => 0, d => 0, e => 0, f => 0);
$row_3 = array(a => 1, b => 2, c => 3, d => 4, e => 5, f => 6);
$row_4 = array(a => 1, b => 2, c => 3, d => 4, e => 5, f => 6);
$row_5 = array(a => 0, b => 0, c => 0, d => 0, e => 0, f => 0);
$row_6 = array(a => 1, b => 2, c => 3, d => 4, e => 5, f => 6);

ループ 7:

$row_1 = array(a => 0, b => 0, c => 0, d => 0, e => 0, f => 0);
$row_2 = array(a => 0, b => 0, c => 0, d => 0, e => 0, f => 0);
$row_3 = array(a => 1, b => 2, c => 3, d => 4, e => 5, f => 6);
$row_4 = array(a => 1, b => 2, c => 3, d => 4, e => 5, f => 6);
$row_5 = array(a => 1, b => 2, c => 3, d => 4, e => 5, f => 6);
$row_6 = array(a => 0, b => 0, c => 0, d => 0, e => 0, f => 0);

ループ 8:

$row_1 = array(a => 0, b => 0, c => 0, d => 0, e => 0, f => 0);
$row_2 = array(a => 1, b => 2, c => 3, d => 4, e => 5, f => 6);
$row_3 = array(a => 0, b => 0, c => 0, d => 0, e => 0, f => 0);
$row_4 = array(a => 0, b => 0, c => 0, d => 0, e => 0, f => 0);
$row_5 = array(a => 1, b => 2, c => 3, d => 4, e => 5, f => 6);
$row_6 = array(a => 1, b => 2, c => 3, d => 4, e => 5, f => 6);

... ... ... ...

ループ n:

... ... ...

4

2 に答える 2

0

基本的に、「値|値なし」のすべての組み合わせが必要です。64 通りの組み合わせがあります ( 2^6)。2 つの値のすべての組み合わせを取得する簡単な方法は、整数を使用し、それを 1 ずつ増やして次の組み合わせを取得し、そのビット パターンを調べることです。

$origArray = array(
  array_combine(range('a', 'f'), range(1, 6)),
  array_combine(range('a', 'f'), range(1, 6)),
  array_combine(range('a', 'f'), range(1, 6)),

  array_combine(range('a', 'f'), range(1, 6)),
  array_combine(range('a', 'f'), range(1, 6)),
  array_combine(range('a', 'f'), range(1, 6)),
);
$emptyArray = array_fill_keys(range('a', 'f'), 0);

define('COMBINATION_LENGTH', 6);

for($combination = pow(2, COMBINATION_LENGTH)-1; $combination >= 0; --$combination) {
  $currentCombinationArray = array();

  for($bitPosition = 0; $bitPosition < COMBINATION_LENGTH; ++$bitPosition) {
    $includeArray = ($combination >> (COMBINATION_LENGTH - $bitPosition - 1)) & 1;

    $currentCombinationArray[$bitPosition] = $includeArray ? $origArray[$bitPosition] : $emptyArray;
  }

  var_dump($currentCombinationArray);
}

これは機能しますが、どれだけうまく機能するかはわかりません。

于 2013-05-11T07:56:03.090 に答える
0

これの趣旨がよくわかりませんが、もしかしたらこんな感じでしょうか?

$row1、$row2、$row3 などを使用する代わりに、これらを配列にしました。この状況では、配列を使用する方が柔軟です。現在の変数を 1 つの配列に入力する方法の例を示しました。

コードを変更し、現在は別のアプローチを使用しています。オブジェクトを使用して配列を格納し、その後、オブジェクトに格納された配列を使用して、ループの反復ごとに「リセット」します。(とにかく、OOPは物事を行うための最良の方法です:-))

<?php
//Create a class to handle array
class arrayHandler {
    private $row = array();

    public function __construct(Array $row) {
        $this->row = $row; //Put array into object member
    }   

    public function loopArray($num=7, $numRandomEntries=3) {

        for ($nr = 0;$nr<intval($num);$nr++) { //Do seven loops

            //Get array stored in object
            $row = $this->row;

            //Get three random keys from the $row-array
            $randomEntries = array_rand($row, intval($numRandomEntries));

            //Set random entries elements to value 0
            foreach($randomEntries as $key) {
                $row[$key] = array_fill_keys(range('a', 'f'), 0);
            }

            $nNr = $nr+1;
            echo "row$nNr = " . print_r($row,true)."<hr />"; //For testing

        }

    }

}

//Your variables with stored arrays...
$row1 = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5, 'f' => 6);
$row2 = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5, 'f' => 6);
$row3 = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5, 'f' => 6);
$row4 = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5, 'f' => 6);
$row5 = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5, 'f' => 6);
$row6 = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5, 'f' => 6);

//Create ONE array from each variable above
$row = array();
$row[0] = $row1;
$row[1] = $row2;
$row[2] = $row3;
$row[3] = $row4;
$row[4] = $row5;
$row[5] = $row6;

//Create the object and do the looping
$ah = new arrayHandler($row);
$ah->loopArray();
?>
于 2013-05-11T07:08:51.453 に答える