Как сделать так, чтобы значения массива PHP были равны друг другу быстрее - PullRequest
0 голосов
/ 30 января 2012

скажем, у меня есть массив этих значений:

$arr = array(190, 2215, 2, 61);

после того, как я запустил свой код с 694 циклами, я получил следующие окончательные значения:

Array
(
    [0] => 696
    [1] => 696
    [2] => 696
    [3] => 696
)

как я могу сделать процесс быстрее и намного лучше ?? Я могу только увеличить или уменьшить значение на 1

Ниже приведены мои коды.

<?php 
    echo '<pre>';
    $arr = array(190, 2215, 2, 61);
    sort($arr);
    print_r($arr);

    $arrLength = count($arr);
    $counter = 0;

    loop:
    $counter++;

    for($i=0; $i<$arrLength; $i++){
        if($arr[$i] < $arr[$arrLength-1] && $arr[$arrLength-1] != $arr[$arrLength-2]) {
            $arr[$i]++;
            $arr[$arrLength-1]--;
        }else if($arr[$i] < $arr[$arrLength-1] && $arr[$arrLength-1] == $arr[$arrLength-2]) {
            $arr[$i]++;
        }
     }

    if($arr[0] != $arr[$arrLength-1]) goto loop;

    print_r($arr);
    print_r($counter);
?>

1 Ответ

3 голосов
/ 30 января 2012

Ваш код просто находит взвешенное среднее между двумя самыми большими значениями в массиве, а затем устанавливает для него все (второй по величине элемент имеет вес number of elements - 1, самый большой элемент имеет вес 1).Вы можете сделать это намного проще и быстрее, например:

<?php 
    echo '<pre>';
    $arr = array(190, 2215, 2, 61);
    sort($arr);
    print_r($arr);

    $arrLength = count($arr);

    // Find weighted average of second largest element and largest element in array:
    $avg = floor(($arr[$arrLength - 2] * ($arrLength - 1) + $arr[$arrLength - 1])/$arrLength);

    // Only need this line if you need the end value of counter from your code
    // $counter = $avg - $arr[0]; // (964 in this example)
    $arr = array_fill(0, $arrLength, $avg);

    print_r($arr);

?>

Примечание: если все, что вам нужно, это число (696), тогда вам не нужна строка array_fill.Просто используйте переменную $avg для того, что вам понадобится позже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...