@viktorross

Ошибка в коде php?

Здравствуйте, подскажите где у меня ошибка, не могу понять, пишет что неопределенный индекс вот тут

$result[$i]['price'] = $res['price']*$ratios[$res['currency']];


а именно переменная ratios, если вместо нее умножить на любую цифру, то все работает
, не пойму почему он не определен, когда вот переменная в начале

$ratios = $mc->getRatios();

я это не писал, поэтому не пойму что тут не так
function multicurrencyInitTemplate($smarty) {

	global $smarty;
	$mc = new multicurrency();
	$mc_default_currency = $mc->getDefault();
	$smarty->assign("mc_default_currency", $mc_default_currency);

}

function calculateUnitPrice($ad_id) {

	$mc = new multicurrency();
	$mc->setUnitPrice($ad_id);

}

function alterSortColumn(&$order_by, &$order_way) {

	//if price column
	if( strstr($order_by, "price") )  {

		$order_by = str_replace("price", "unit_price", $order_by);

	}

}

function transformPrices(&$result) {

	$mc = new multicurrency();
	$ratios = $mc->getRatios();

	$mc_default_currency = $mc->getDefault();

	global $post_array;
	if(isset($post_array['currency']) && $post_array['currency']) {
		$crt_currency = $post_array['currency'];
		$crt_currency = strtoupper($crt_currency);
		$mc->setMulticurrencyCookie($crt_currency);
	}
	else
		$crt_currency = $mc_default_currency;

	$mc_default_ratio = $ratios[$crt_currency];

	// recalculate ratios if not default currency
	if($crt_currency != strtolower($mc_default_currency)) {

		foreach($ratios as $key=>$value) {

			if($key==$crt_currency) $ratios[$key] = 1;
			else {

				$ratios[$key] = $ratios[$key]/$mc_default_ratio;

			}

		}

	} // end recalculate ratios

	$i = 0;
	foreach($result as $res) {

		if( $res['price']>0 && $res['currency'] && strtolower($res['currency'])!=$crt_currency) {

			$result[$i]['price'] = $res['price']*$ratios[$res['currency']];
			$result[$i]['currency'] = $crt_currency;
			$result[$i]['price_curr'] = add_currency(format_price_field($result[$i]['price']), $crt_currency);

		}

		if( $res['price']==0 && $res['currency']!=$crt_currency) {

			$result[$i]['price_curr'] = add_currency(format_price_field(0), $crt_currency);

		}

		$i++;

	}

}


вот функция которая там вызывается

function getRatios() {

		global $db;
		$result = $db->fetchAssocList("select `currency`, `ratio` from `".$this->settings_table."`");
		$ratio_array = array();
		foreach($result as $r) {
			$ratio_array[$r['currency']] = $r['ratio'];
		}
		return $ratio_array;

	}


может в ней что-то не то
  • Вопрос задан
  • 100 просмотров
Пригласить эксперта
Ответы на вопрос 2
ns174ru
@ns174ru
https://ns174.ru
замените эту переменную на вызов функции GetRatios()

$result[$i]['price'] = $res['price']*GetRatios();
Ответ написан
@BorisKorobkov Куратор тега PHP
Web developer
неопределенный индекс вот тут
$ratios[$res['currency']]


Это означает, что в массиве $ratios нет индекса $res['currency']

Как исправить?
В общем случае всегда надо isset или array_key_exists
В конкретном случае: с помощью xdebug или хотябы print_r проверить значение идекса, значение массива и понять, в чем именно проблема
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы