Есть код, его суть - периодическое создание ордеров на продажу и покупку
for ($i = 0; $i < $num; $i++) {
$req = $mysqli->query("SELECT * FROM `coinInfo` WHERE coinName = 'BTC'");
while($row = $req->fetch_assoc()) {
$ask = $row["ask"]/100000000;
$bid = $row["bid"]/100000000;
}
$operation = array("BUY", "SELL");
$rand_keys = array_rand($operation);
$int = mt_rand(1,4)/10000;
$fractional = mt_rand(1,99) / 10000;
$float = $int + $fractional;
$price = rand_float($bid,$ask);
$amount = $float;
$type_operation = $operation[$rand_keys];
$Responce=create_orders($mysqli,$sesion_id = 299,$contest_id = 1,$price,$amount,$name_val = 'USD',$name_prod = 'BTC',$type_operation);
}
Мне нужно продублировать эту часть кода для ряда монет, т.е сейчас стоит BTC, для eth все будет тоже самое, кроме двух строчек
$req = $mysqli->query("SELECT * FROM `coinInfo` WHERE coinName = 'ETH'");
$Responce=create_orders($mysqli,$sesion_id = 299,$contest_id = 1,$price,$amount,$name_val = 'USD',$name_prod = 'ETH',$type_operation);
}
Можно как-то сократить количество копируемого кода?
Попробовал сделать так:
function createOrders($coinName){
function rand_float($st_num=0,$end_num=1,$mul=1000000)
{
if ($st_num>$end_num) return false;
return mt_rand($st_num*$mul,$end_num*$mul)/$mul;
}
$num= rand(2,4);
for ($i = 0; $i < $num; $i++) {
$req = $mysqli->query("SELECT * FROM `coinInfo` WHERE coinName = $coinName");
while($row = $req->fetch_assoc()) {
$ask = $row["ask"]/100000000;
$bid = $row["bid"]/100000000;
}
$operation = array("BUY", "SELL");
$rand_keys = array_rand($operation);
$int = mt_rand(1,4)/10000;
$fractional = mt_rand(1,99) / 10000;
$float = $int + $fractional;
$price = rand_float($bid,$ask);
$amount = $float;
$type_operation = $operation[$rand_keys];
$Responce=create_orders($mysqli,$sesion_id = 299,$contest_id = 1,$price,$amount,$name_val = 'USD',$name_prod=$coinName,$type_operation);
}
}
$coins = array('BTC', 'ETH');
array_walk($coins, createOrders);
Но получаю ошибку в error log:
Stack trace:
#0 [internal function]: createOrders('BTC', 0)
#1 /home/gamiblxx/public_html/create_order_cron.php(112): array_walk(Array, 'createOrders')
#2 {main}
thrown in /home/gamiblxx/public_html/create_order_cron.php on line 92
[21-May-2019 01:10:36 America/New_York] PHP Warning: Use of undefined constant createOrders - assumed 'createOrders' (this will throw an Error in a future version of PHP) in /home/gamiblxx/public_html/create_order_cron.php on line 112
[21-May-2019 01:10:36 America/New_York] PHP Notice: Undefined variable: mysqli in /home/gamiblxx/public_html/create_order_cron.php on line 92
[21-May-2019 01:10:36 America/New_York] PHP Fatal error: Uncaught Error: Call to a member function query() on null in /home/gamiblxx/public_html/create_order_cron.php:92
Stack trace:
#0 [internal function]: createOrders('BTC', 0)
#1 /home/gamiblxx/public_html/create_order_cron.php(112): array_walk(Array, 'createOrders')
#2 {main}
thrown in /home/gamiblxx/public_html/create_order_cron.php on line 92
Оформите ваш код в функцию, которая принимает в качестве аргумента название валюты function createOrders($coinName)
и замените "BTC"
на $coinName
.
Функцию createOrders
вызывайте для каждой нужной валюты:
$coins = array('BTC', 'ETH', 'YTN');
array_walk($coins, createOrders);
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Как можно по всему проекту использовать только 1 объект, не используя паттерн синглтон? Или это единственное решение?
Почему в java Observable является именно классом, а не интерфейсом?
Какие есть способы обработки изображения для выделения графика? То есть из изображения с графиком нужно отделить график от сетки и фона