array_is_list([]); // true
array_is_list(['apple', 2, 3]); // true
array_is_list([0 => 'apple', 'orange']); // true
// Массив начинается не с 0
array_is_list([1 => 'apple', 'orange']); // false
// Ключи массива не по порядку
array_is_list([1 => 'apple', 0 => 'orange']); // false
// Ключи массива не являются целыми числами
array_is_list([0 => 'apple', 'foo' => 'bar']); // false
// Непоследовательные ключи
array_is_list([0 => 'apple', 2 => 'bar']); // false
insert into
вызывает ошибку из-за дубликата, это можно решить разными способами.insert ignore into
. Это приведёт к тому, что при наличии дубликата запись не будет добавлена, но при этом выполнение скрипта продолжится.replace into
. В этом случае старая запись будет заменена новой. Но если у какой-то другой таблицы создана связь с этой посредством foreign key
с каскадной реакцией, это приведёт к удалению всех ссылающихся на этот ключ записей.on duplicate key update
:insert into films (img, img_vertical, trayler...) values (:img, :img_vertical, :trayler...)
on duplicate key update
set img = :imgUpd , img_vertical = :img_verticalUpd, trayler = :trayler итд ...;
data: { art: $('#artnumber1').val() + ' - ' + $('#artnumber2').val() }
Тогда на сервер придёт $_Post['art'] содержащий "artnumber1-artnumber2"data: {
art1: $('#artnumber1').val(),
art2: $('#artnumber2').val()
}
Тогда на сервер придут $_Post['art1'] и $_Post['art2'], содержащие "artnumber1" и "artnumber2" по отдельности. Соединить их в одну строку с " - " можно уже потом ближе к выводу данных. $minutes = ['03', '09', '13', '18', '23', '28'];
var_dump(getRange($minutes));
function getRange($minutes): array
{
if(count($minutes) < 5) return $minutes;
$minutes = array_map(fn($m) => intval($m), $minutes);
rsort($minutes);
$ranges = [];
foreach ($minutes as $k => $minute){
if($k){
$ranges[] = $prev - $minute;
}
$prev = $minute;
}
$min = min($ranges);
$max = max($ranges);
return $min === $max
? [$max]
: [$min, $max];
}
function calculate($num){
return match (false) {
isPositive($num) => 'Значение отрицательное',
!isFignya($num) => 'Значение фигня',
!isOtherFignya($num) => 'Значение другая фигня',
default => '$num - положительное число'
};
}
try{
//пробуем выполнить
calculate($num);
}catch(MyCustomException $e){
//если не получилось, смотрим причину в $e и решаем что делать.
}
, а останавливать чекеры при помощи throw new MyCustomException()class DB
{
public ?PDO $pdo;
private ?array $opt;
public ?string $pHolders;
public ?array $parArr;
public function __construct(
string $connectName = '',
string $charset = 'utf8mb4',
bool $flat = false
)
{
if($flat) return;
$con = ConnectDB::byName($connectName);
$dsn = "mysql:host=$con->host;dbname=$con->name;charset=$charset";
$this->opt = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => FALSE
];
$this->pdo = new PDO($dsn, $con->user, $con->pass, $this->opt);
}
public function qwe($sql, $args = NULL): bool|PDOStatement
{
if (!$args) {
return self::query($sql);
}
return self::execute($sql, $args);
}
private function execute(string $sql, array $args): PDOStatement
{
$stmt = $this->pdo->prepare($sql);
$stmt->execute($args);
return $stmt;
}
private function query($sql): PDOStatement
{
return $this->pdo->query($sql);
}
}
function qwe(string $sql, array $args = null): bool|PDOStatement
{
global $DB;
//Синглтон
if(!isset($DB)){
$DB = new DB();
}
return $DB->qwe($sql,$args);
}
// $row->name выглядит опрятнее, чем $row['name']
// Для этого превращаем массив в объект. (object)
while ($row = (object) mysqli_fetch_assoc($result)) {
//$kol_grop++; Это не нужно
// $name_grop .= $row['name'] . ',';
// Не следует использовать конкатенацию в цикле.
// Лучше собрать в массив и склеить в implode после цикла.
// array_push($array_nama_g, array('name'=>$row['name'], 'subscriber_bes'=>$row['subscriber_bes']));
// Это можно выразить иначе:
// 'name' кладем в ключ, 'subscriber_bes' в значение
$array_nama_g[$row->name] = $row->subscriber_bes;
}
// $name_grop .= $row['name'] . ','; <-- это было в цикле while
// Вместо этого берём ключи из $array_nama_g и клеим в строку:
$name_grop = implode(',', array_keys($array_nama_g));
// А вообще я так и не понял зачем нужна эта переменная.
// Да еще совпадающая с именем ключа в res_raspi. Очень запутывает.
//api
// Вместо array() можно использовать []
$res_raspi = [
['name_grop' => 158,
'subscriber_bes' => '125588,87156978,899'],
['name_grop' => 668,
'subscriber_bes' => '188,8799']
];
/*
for ($i = 0; $i < $kol_grop; $i++) {
$fed_key_array = array_search($res_raspi[$i]['name_grop'], array_column($array_nama_g, 'name'));
$users_id = $array_nama_g[$fed_key_array]['subscriber_bes'];
// $users_id будет перезаписываться каждую итерацию цикла.
// Или планируется его применить до наступления следующей?
}
*/
// Записываем это более понятным образом
foreach ($res_raspi as $rapi) {
$users_id = $array_nama_g[$rapi['name_grop']];
}
while ($row = (object) mysqli_fetch_assoc($result)) {
$array_nama_g[$row->name] = $row->subscriber_bes;
}
$name_grop = implode(',', array_keys($array_nama_g));
$res_raspi = [
['name_grop' => 158,
'subscriber_bes' => '125588,87156978,899'],
['name_grop' => 668,
'subscriber_bes' => '188,8799']
];
foreach ($res_raspi as $rapi) {
$users_id = $array_nama_g[$rapi['name_grop']];
}