Проверьте, если любое из значений в моем массиве = 15, то сделайте что-нибудь - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть этот массив:

Array
(
    [10:00:00] => 15
    [10:30:00] => 15
    [11:00:00] => 8
)

Мне нужно посмотреть, равно ли любое из них 15, если что-то сделать.В будущем будет добавлено больше предметов.Все элементы являются временными интервалами, а число справа - количество бронирований.Не более 15 бронирований за один временной интервал.

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

Другой способ сделать это - найти все те, которые не равны 15, и затем добавить ихк выбору.

Я, конечно, включу некоторую проверку на стороне сервера, чтобы остановить выделение более 15 временных интервалов.

Ответы [ 5 ]

0 голосов
/ 28 февраля 2019

Поскольку вы хотите отобразить поле select, вам все равно придется перебирать массив.Единственное разумное условие перед этим может заключаться в том, забронированы ли уже все слоты.Тогда вы можете вообще не захотеть показывать <select>, а вместо этого заметить.Поиск, если хотя бы один является 15 делает не , кажется, имеет смысл.

count($slots) === (array_count_values($slots)[15]??0) верно, когда все слоты забронированы.

Полный блок генерации кода, включенный / отключенный <options> или вообще не имеющий значения <select>, может выглядеть так:

$slots =
[
  '10:00:00' => 15,
  '10:30:00' => 15,
  '11:00:00' => 8,
];

if(count($slots) === (array_count_values($slots)[15]??0))
{
?>
<div>No slots are available anymore.</div>
<?php
}
else
{
?>

<select name="slot">
  <option value="">select a time slot</option>
<?php
  foreach ($slots as $k=>$v)
  {
    $avail = 15-intval($v);
?>
  <option value="<?php echo $k;?>"<?php if($avail < 1) echo ' disabled'?>><?php echo "$k ($avail available)";?></option>
<?php
  }
?>
</select>
<?php
}
0 голосов
/ 28 февраля 2019

Существуют различные методы сборки в php для решения этой проблемы.

некоторые из них.

  1. in_array
  2. array_search
  3. array_filter
  4. array_reduce
  5. array_diff
  6. array_intersect

вот как вы на них делаете

  1. in_array

    if (in_array(15, $array)) // do your stuff here

  2. array_search

    if (array_search(15, $array) !== false) // do your stuff here

  3. array_filter

    if (! empty(array_filter($array, function ($a) { return $a == 15; })) // do your stuff here

  4. array_reduce

    if (array_reduce($array, function ($c, $d) { return $c = $c == 15 || $d == 15 ? 15 : 0; }) -- 15) // do your stuff here

  5. array_diff

    if (count(array_diff($array, [ 15 ])) != count($array)) // do your stuff here

  6. array_intersect

    if (! empty(array_intersect($array, [15]))) // do your stuff here

Существует много других методов, в зависимости от используемой логики.

0 голосов
/ 28 февраля 2019

Чтобы получить массив всех этих НЕ равных 15:

$result = array_filter(function($v) { return $v != 15; }, $array);

Чтобы проверить, находится ли значение в массиве, вы можете использовать in_array , однако для вашего случая использованияВы хотите исключить ВСЕ из 15 значений из вашего выбора.Так что просто создайте массив того, что вы хотите. Комментарий

Andreas сначала не пришел мне в голову, но я обычно так и делал:

$result = array_diff($array, [15]);
0 голосов
/ 28 февраля 2019

Вы можете использовать array_count_values() вместе с isset().

if(isset(array_count_values($myArray)[15])) {
    //do something
}

По сути, array_count_values() вернет массив, который с вашимПримером может быть:

[15 => 2, 8 => 1]

Сколько раз каждое значение появилось в исходном массиве.Затем мы используем isset(), чтобы проверить, существует ли ключ 15 в выходных данных array_count_values().

0 голосов
/ 28 февраля 2019

Это один из способов сделать это ...

if (in_array(15, $myArray)) {
  // Do something
}

... как упоминалось @AbraCadaver, это из официального руководства PHP на https://php.net/manual/en/function.in-array.php

...