PHP для цикла с функциями массива и среза массива - PullRequest
1 голос
/ 29 июня 2019

Как часть анализа данных о расходах, я пытаюсь определить три основных категории расходов за каждый месяц. Сейчас у меня есть данные за 3 месяца: Массив $month0,$month1,$month3.

Сейчас я использую приведенный ниже код, и он работает нормально

$month0 = array("Bank"=>$Bank[0], "CreditCard"=>$CreditCard[0], "Loan"=>$Loan[0],"Household"=>$Household[0],"Utilities"=>$Utilities[0]);  
$month1 = array("Bank"=>$Bank[1], "CreditCard"=>$CreditCard[1], "Loan"=>$Loan[1],"Household"=>$Household[1],"Utilities"=>$Utilities[1]);  
$month2 = array("Bank"=>$Bank[2], "CreditCard"=>$CreditCard[2], "Loan"=>$Loan[2],"Household"=>$Household[2],"Utilities"=>$Utilities[2]);  

arsort($month0 ); 
arsort($month1 ); 
arsort($month2 ); 

$top3month0 = array_slice($month0, 0, 3); 
$top3month1 = array_slice($month1, 0, 3); 
$top3month2 = array_slice($month2, 0, 3); 

foreach ($top3month0 as $category => $amount){  
    $cat_top3month0[] = $category;  
    $amt_top3month0[] = $amount;
} 

foreach ($top3month1 as $category => $amount){  
    $cat_top3month1[] = $category;  
    $amt_top3month1[] = $amount;
} 

foreach ($top3month2 as $category => $amount){  
    $cat_top3month2[] = $category;  
    $amt_top3month2[] = $amount;
} 

//For Month0

echo "Top 1 category is ".$cat_top3month0[0]." and amount: ".$amt_top3month0[0];
echo "Top 2 category is ".$cat_top3month0[1]." and amount: ".$amt_top3month0[1];
echo "Top 3 category is ".$cat_top3month0[2]." and amount: ".$amt_top3month0[2];

//For Month1

echo "Top 1 category is ".$cat_top3month1[0]." and amount: ".$amt_top3month1[0];
echo "Top 2 category is ".$cat_top3month1[1]." and amount: ".$amt_top3month1[1];
echo "Top 3 category is ".$cat_top3month1[2]." and amount: ".$amt_top3month1[2];

//For Month3

echo "Top 1 category is ".$cat_top3month2[0]." and amount: ".$amt_top3month2[0];
echo "Top 2 category is ".$cat_top3month2[1]." and amount: ".$amt_top3month2[1];
echo "Top 3 category is ".$cat_top3month2[2]." and amount: ".$amt_top3month2[2];

Я пытаюсь использовать for loop здесь, чтобы уменьшить длину кода. Я изменил код выше, как показано ниже, используя цикл for

for ($i = 0; $i<3; $i++){

$month[i] = array("Bank"=>$Bank[i], "CreditCard"=>$CreditCard[i], "Loan"=>$Loan[i],"Household"=>$Household[i],"Utilities"=>$Utilities[i]);  

arsort($month[i] ); 

$top3month[i] = array_slice($month[i], 0, 3); 

foreach ($top3month[i] as $category => $amount){  
    $cat_top3month[i][] = $category;  
    $amt_top3month[i][] = $amount;
} 

}

//For Month0

/echo "Top 1 category is ".$cat_top3month0[0]." and amount: ".$amt_top3month0[0];
/echo "Top 2 category is ".$cat_top3month0[1]." and amount: ".$amt_top3month0[1];
/echo "Top 3 category is ".$cat_top3month0[2]." and amount: ".$amt_top3month0[2];

//For Month1

echo "Top 1 category is ".$cat_top3month1[0]." and amount: ".$amt_top3month1[0];
echo "Top 2 category is ".$cat_top3month1[1]." and amount: ".$amt_top3month1[1];
echo "Top 3 category is ".$cat_top3month1[2]." and amount: ".$amt_top3month1[2];

//For Month3

echo "Top 1 category is ".$cat_top3month2[0]." and amount: ".$amt_top3month2[0];
echo "Top 2 category is ".$cat_top3month2[1]." and amount: ".$amt_top3month2[1];
echo "Top 3 category is ".$cat_top3month2[2]." and amount: ".$amt_top3month2[2];

Но приведенный выше код не работает. При просмотре журнала отладки я вижу ниже ошибку

PHP Warning:  Use of undefined constant i - assumed 'i' (this will throw an Error in a future version of PHP)

против линии

$month[i] = array("Bank"=>$Bank[i], "CreditCard"=>$CreditCard[i], "Loan"=>$Loan[i],"Household"=>$Household[i],"Utilities"=>$Utilities[i]); 

Я новичок в PHP и все еще учусь. Может кто-нибудь, пожалуйста, сообщите мне проблему с кодом? или предложить лучший подход к этому?

Обновление:

Обновлен код для исправления i до $i

for ($i = 0; $i<3; $i++){

$month[$i] = array("Bank"=>$Bank[$i], "CreditCard"=>$CreditCard[$i], "Loan"=>$Loan[$i],"Household"=>$Household[$i],"Utilities"=>$Utilities[$i]);  

arsort($month[$i] ); 

$top3month[$i] = array_slice($month[$i], 0, 3); 

foreach ($top3month[$i] as $category => $amount){  
    $cat_top3month[$i][] = $category;  
    $amt_top3month[$i][] = $amount;
} 

}

//For Month0

echo "Top 1 category is ".$cat_top3month0[0]." and amount: ".$amt_top3month0[0];
echo "Top 2 category is ".$cat_top3month0[1]." and amount: ".$amt_top3month0[1];
echo "Top 3 category is ".$cat_top3month0[2]." and amount: ".$amt_top3month0[2];

//For Month1

echo "Top 1 category is ".$cat_top3month1[0]." and amount: ".$amt_top3month1[0];
echo "Top 2 category is ".$cat_top3month1[1]." and amount: ".$amt_top3month1[1];
echo "Top 3 category is ".$cat_top3month1[2]." and amount: ".$amt_top3month1[2];

//For Month3

echo "Top 1 category is ".$cat_top3month2[0]." and amount: ".$amt_top3month2[0];
echo "Top 2 category is ".$cat_top3month2[1]." and amount: ".$amt_top3month2[1];
echo "Top 3 category is ".$cat_top3month2[2]." and amount: ".$amt_top3month2[2];

Теперь у меня есть следующие ошибки:

PHP Notice:  Array to string conversion in 

против линии:

$month[$i] = array("Bank"=>$Bank[$i], "CreditCard"=>$CreditCard[$i], "Loan"=>$Loan[$i],"Household"=>$Household[$i],"Utilities"=>$Utilities[$i]);  

и

PHP Fatal error:  Uncaught Error: Only variables can be passed by reference in

против arsort($month[$i] );

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