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];
}
я буду считывать лишь длину списка
<template>
<Test1Child></Test1Child>
</template>
<script setup>
import Test1Child from "components/Test/Test1Child.vue";
import {provide, ref} from "vue";
const persons = ref([
{id: 1, name: 'Василенко Пётр Владимирович', checked: true},
{id: 2, name: 'Ерёменко Владислав Игоревич', checked: false},
{id: 3, name: 'Антонова Елена Сергеевна', checked: true},
])
provide('persons', persons)
</script>
<template>
<div class="divRadio">
<template v-for="person in persons" :key="person.id">
<Test1Person :person="person"></Test1Person>
</template>
</div>
<div>Отмечено:{{ countCheckedPersons }}</div>
</template>
<script setup>
import {computed, inject} from "vue";
import Test1Person from "components/Test/Test1Person.vue";
const persons = inject('persons')
const countCheckedPersons = computed(() => {
return persons.value.filter(el => el.checked === true).length
})
</script>
<template>
<div class="divus" style="margin-top: 0px;">
<input type="checkbox"
:id="'name' + personMutable.id"
:value="personMutable.id"
class="checkus"
:checked="personMutable.checked"
@change="personMutable.checked = !personMutable.checked"
/>
<label :for="'name' + personMutable.id" class="labelus">{{ personMutable.name }}</label>
</div>
</template>
<script setup>
import {ref} from "vue";
const props = defineProps({
person: Object
})
const personMutable = ref(props.person)
</script>
Как сделать так, чтобы 2 компонент отслеживал изменения, но при этом я мог с ними работать и менять данные.
<script setup>
//родитель
const TaskList = ref([])
provide('TaskList', TaskList)
//потомок
const TaskList = inject('TaskList')
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);
}