检查我的数组中是否有任何值= 15,然后执行某些操作

时间:2019-02-28 19:57:10

标签: php arrays counting

我有这个数组:

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

我需要查看它们是否等于15,如果有的话。 将来会添加更多项目。这些项目是所有时间段,右边的数字是预订量。每个时段的预订不超过15个。

时间将以表格形式显示为选择选项。我要么需要全部显示并禁用已预订的内容,要么仅显示可用的广告位。

另一种方法是查找所有不等于15的那些,然后将它们添加到选择中。

我当然会包括一些服务器端验证,以停止将15个以上的分配给一个时隙。

5 个答案:

答案 0 :(得分:2)

这是一种实现方式...

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

...如@AbraCadaver所述,它来自https://php.net/manual/en/function.in-array.php的官方PHP手册

答案 1 :(得分:2)

要获取所有不等于15的数组:

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

要检查某个值是否在数组中,可以使用in_array,但是对于您的用例,您希望从选择的值中消除所有15个值。因此,只需构建所需的数组即可。

Andreas的评论起初并未出现在我身上,但我通常会这样做:

$result = array_diff($array, [15]);

答案 2 :(得分:0)

您可以将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()的输出中。

答案 3 :(得分:0)

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

还有更多方法,具体取决于您使用的逻辑。

答案 4 :(得分:0)

由于要显示select框,因此无论如何都需要遍历数组。这样做之前唯一有意义的条件可能是是否已预订所有所有广告位。然后,您可能根本不想显示<select>,而是需要注意一些。看至少有一个15,似乎不是有意义。

当预订所有插槽时,

count($slots) === (array_count_values($slots)[15]??0)为true。

生成启用/禁用<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
}