3

値が重複している場合、多次元配列を最低 5 回反復して移動できる PHP コードはありますか?

これはコード例です。

<?php
  $results = array( 
               array('value'   =>  10),
               array('value'   =>  2),
               array('value'   =>  1),
               array('value'   =>  3),
               array('value'   =>  2), //This will move 
                    array('value'   =>  4),
                    array('value'   =>  5),
                    array('value'   =>  5),  //This will move
                    array('value'   =>  3),  //This will move
                    array('value'   =>  4),  //This will move
                    array('value'   =>  10), //Ok reach minimum of 5 count
                    array('value'   =>  9),
                    array('value'   =>  8),
                    array('value'   =>  7),
                    array('value'   =>  7), // This will move
                    array('value'   =>  8), // This will move
                    array('value'   =>  1), //Ok reach minimum of 5 count
                    array('value'   =>  6), 
                    array('value'   =>  6),  // This will move  
                    array('value'   =>  19) //Ok reach minimum of 5 count               
                    );
                );
?>


これが基本的な考え方です。最低 5 回の繰り返しで重複が見つかった場合は、値を移動したいと考えています。反復の移動は、5 回を超える可能性があります。データはランダムにすることができます。より良い結果を見つけるためにループします。これは可能ですか?

これが私の予想される結果です。これは、ロジックを満たすことができる他の結果である可能性があります。

<?php
  $results = array( 
               array(
                    array('value'   =>  6), //Ok
                    array('value'   =>  9), //Ok
                    array('value'   =>  2), //Ok
                    array('value'   =>  7), //Ok
                    array('value'   =>  1), //Ok
                    array('value'   =>  4), //Ok
                    array('value'   =>  8), //Ok
                    array('value'   =>  5), //Ok
                    array('value'   =>  9), //Ok
                    array('value'   =>  2), //Ok
                    array('value'   =>  3), //Ok
                    array('value'   =>  6), //Ok
                    array('value'   =>  4), //Ok
                    array('value'   =>  10), //Ok
                    array('value'   =>  8), //Ok
                    array('value'   =>  7), //Ok
                    array('value'   =>  1), //Ok
                    array('value'   =>  3), //Ok
                    array('value'   =>  5),  //Ok
                    array('value'   =>  10)  //Ok                   
                    );
                );
?>


あなたが私を助けてくれることを願っています。

編集:

これが私のコードです

<?php
$required_array = array();
$temp  = "";     
$temp2 = "";   
foreach($array as $key=>$child) {
    if( $child["value"]==$temp ) {
        $i = $key+5; 
        $required_array[$i] = $child;
    } else {
        $i = $key;
        //if(isset($required_array[$i])) $i++; 
        while(isset($required_array[$i])) { 
            $i++;                           
        }                                  

        $required_array[$i] = $child;   
    }
    $temp  = $child["value"];

}
ksort($required_array); 
print_r($required_array);

//Tried this but always move on five iterations and found duplicate within the range of five 
4

1 に答える 1

1

array_chunkは私の問題を解決します。

<?php
$chunks = array_chunk($array, ceil(count($array)/5));
$array = array();

for($x = 0, $numX =  count($chunks[0]); $x < $numX; $x++){
    for($y = 0, $numY = count($chunks); $y < $numY; $y++){
        if(isset($chunks[$y][$x]))
        //echo $x.' '.$y.'<br>';
        $array[] = $chunks[$y][$x];
    }
}
print_r($array);
?><br>

とにかく、私の次の問題は、配列に 2 つの行がある場合です。以下の例のように。

<?php
$array   =  array(
                 array('value' => 1, 'value2' => 2),
                 array('value' => 3, 'value2' => 1)
                 );

?><br>

両側 (value と value2) の重複をチェックし、既存のコードを使用するにはどうすればよいですか?

于 2013-10-24T03:53:15.717 に答える