2016-05-05 4 views
-2

Я хочу рассчитать две операции с помощью цикла. Они уже работают и обеспечивают результат, который мне нужен. Но я хочу, чтобы они больше походили на кодирование. Так что если кто-нибудь может помочь им с помощью для PHP влучший способ вычисления циклов в php

for($i=0;i<something;$i++){ 
    $temp_calc = ; 
} 

здесь два заявления.

  1. В первой длины выписки из массива 9.

  2. Во второй длины выписки из массива 12.

оба утверждения должны быть решены в разных цикл, как они полностью разные вопросы.


$temp_calc = 10*$temp_array[0]+9*$temp_array[1]+8*$temp_array[2]+7*$temp_array[3]+6*$temp_array[4]+5*$temp_array[5]+4*$temp_array[6]+3*$temp_array[7]+2*$temp_array[8]; 

$temp_calc = 1*$temp_array[0]+3*$temp_array[1]+1*$temp_array[2]+3*$temp_array[3]+1*$temp_array[4]+3*$temp_array[5]+1*$temp_array[6]+3*$temp_array[7]+1*$temp_array[8]+3*$temp_array[9]+1*$temp_array[10]+3*$temp_array[11]; 

Заранее спасибо

+0

Где ваши целые значения происходят из - в первом известково, у вас есть '10', то' 9' и т.д. - где откуда взялись эти ценности? А во втором у вас есть '1',' 3', '1',' 3' - это совсем другая последовательность. Что определяет эти значения? –

+0

это артематическая операция, например, умножить первую цифру на 10 секунд на 9 и так далее. Оба расчета должны выполняться в отдельном цикле и отдельных ответах – Shristi

+0

Я понимаю, что это арифметический расчет, но то, что нам нужно знать, чтобы помочь ответить, - это **, где ** принимают значения? Как они определяются/устанавливаются? –

ответ

1

для обоих вопросов:

$temp_array = array(2,2,2,2,2,2,2,2,2);//sample 

function calc_1($temp_array){//first 
    $total=0; 
    $count = count($temp_array)+1; 
    foreach($temp_array as $value){ 
     $total += $count*$value; 
     $count-=1; 
    } 
    return $total; 
} 
function calc_2($temp_array){//second 
    $total=0; 
    foreach($temp_array as $k=>$value){ 
     $total += ($k%2==0) ? 1*$value : 3*$value;//when is even or odd 
    } 
    return $total; 
} 
var_dump(calc_1($temp_array));//resp1 
var_dump(calc_2($temp_array));//resp2 
+2

Зачем OP это попробовать? *** Хороший ответ *** всегда будет объяснять, что было сделано и почему это было сделано таким образом, не только для OP, но и для будущих посетителей SO. –

+0

спасибо, что работает отлично. – Shristi

0

Для вашего результата

$temp_calc = 10*$temp_array[0]+9*$temp_array[1]+8*$temp_array[2]+7*$temp_array[3]+6*$temp_array[4]+5*$temp_array[5]+4*$temp_array[6]+3*$temp_array[7]+2*$temp_array[8]; 

Вы должны иметь цикл следующим образом. Он будет запускать цикл до 8-го индекса вашего temp_array и умножать каждое значение индекса на $i и суммировать в переменной $temp_calc_1.

<?php 
$temp_calc_1 = 0; 
for($i=0;$i<9;$i++){ 
    $temp_calc_1 = $temp_calc_1 + (10-$i)*$temp_array[$i] ; 
} 

Для вашего второго результата

$temp_calc = 1*$temp_array[0]+3*$temp_array[1]+1*$temp_array[2]+3*$temp_array[3]+1*$temp_array[4]+3*$temp_array[5]+1*$temp_array[6]+3*$temp_array[7]+1*$temp_array[8]+3*$temp_array[9]+1*$temp_array[10]+3*$temp_array[11]; 

выше должен быть преобразован в следующий цикл, это будет работать цикл до вашего 12-го индекса temparray и сделать расчет. На этот раз он будет умножать каждое значение индекса temparray либо 1 и 3. Таким образом, впервые он будет умножен на 1 и в следующий раз с 3 и так далее

// 
$temp_calc_2 = 0; 
for($i=0;$i<12;$i++){ 
    $j = $i%2?3:1; 
    $temp_calc_2 = $temp_calc_2 + $j*$temp_array[$i] ; 
} 
?> 
+0

вы получили это правильно, как я хочу, но в нем что-то не так. при загрузке страницы останавливается загрузка. – Shristi

+0

@Shristi Я обновил его, это была опечатка. –

+1

@JayBlanchard делает это, кажется, лучше сейчас :) –

0

Если массив называется $myArray, то:

/*Since I can't know what the sequence of the values are that you 
are multiplying, and because you might need other sequences in the 
future, a function was developed that chooses which sequence you 
want to multiply.*/ 

function findSomeValues($arraySize) 
{ 
    switch ($arraySize) { 
    case 9: 
    { 
     $someValues = array(10,9,8,7,4,5,4,3,2); 
    } 
    break; 
    case 12: 
    { 
     $someValues = array(1,3,1,3,1,3,1,3,1,3,1,3); 
    } 
    break; 
    default: 
     $someValues = array(); 
    } 

    return $someValues; 
} 

/*This following function then finds how big your array is, looks 
for a sequence stored in the findSomeValues function. If a sequence 
exist for that array size (in this case if you have an array either 
9 or 12 elements long), the result will be calculated and echoed. If 
the sequence was not found, an error message would be echoed.*/ 

function multiplyValues($myArray) { 
    $result = 0; 
    $arraySize = count($myArray);//obtaining array size 
    $someValues = findSomeValues($arraySize);//obtaining sequence to multiply with 
    if (count($someValues)>0) 
    { 
    for($i=0;i<$arraySize;$i++){ 
     $result += $myArray[i]*$someValues[i]; 
    } 
    echo "result = ".$result."<br>";//result message 
    } 
    else 
    { 
    echo "you are missing some values<br>";//error message 
    } 
} 

Позвольте мне знать, если это работает для вас.


Альтернатива:

Если вы предпочитаете что-то немного проще:

//this array holds the sequences you have saved: 
$sequenceArray = array(
    9 => array(10,9,8,7,4,5,4,3,2), 
    12 => array(1,3,1,3,1,3,1,3,1,3,1,3) 
); 

//this function does the multiplication: 
function multiplyValues($myArray) 
{ 
    $arraySize = count($myArray); 
    for($i=0;i<$arraySize;$i++){ 
    $result += $myArray[i]*$sequenceArray[i]; 
    } 
    echo "result = ".$result."<br>";//result message 
} 
+0

может написать код, похожий на sammer, простой для цикла. thnx для ответа. – Shristi

+0

Что такое sammer? – Webeng

+0

автор этого второго ответа – Shristi

2

Это будет немного проще использовать foreach петлю, а не for петли. Если вам необходимо использовать цикл for, потому что это требование назначения, вы можете проверить PHP documentation. Есть несколько примеров использования цикла for для циклического перемещения по массиву.Это общая и базовая структура управления, и для вас будет более полезно понять, как ее использовать. Более важной частью является то, что происходит внутри цикла. Существует несколько способов сделать это, но вот несколько основных примеров.

Первый один:

// initialize multiplier and result outside the loop 
$multiplier = 10; 
$result = 0; 

// loop over the values 
foreach ($temp_array as $value) { 
    // add the value * multiplier to the result and decrement the multiplier 
    $result += $value * $multiplier--; 
} 

Второй один

// initialize multiplier and result outside the loop 
$multiplier = 1; 
$result = 0; 

// loop over the values 
foreach ($temp_array as $value) { 
    // add the value * multiplier to the result 
    $result += $value * $multiplier; 
    // switch the multiplier to the alternating value 
    if ($multiplier == 1) { 
     $multiplier = 3; 
    } else { 
     $multiplier = 1; 
    } 
    // The switch can be done more simply using a ternary operator like this: 
    // $multiplier = $multiplier == 1 ? 3 : 1; 
}