PHP检查数组中的多个值 - 正确的方法?

时间:2017-08-30 14:45:54

标签: php arrays

我想知道如何以不同的方式做到以下几点,因为我觉得我这样做是错误的,会让开发人员感到畏缩。

$ prodcat是一个带有id的数组,我想在某些id在数组中时发出警告。这就是我现在所做的,它确实做到了,但我确信有一种更有效的编码方式。

$valuecheck = false;

foreach ($prodcat as $daafid) {
    if (($daafid == '96') || ($daafid == '97') || ($daafid == '99') || ($daafid == '122') || ($daafid == '123') || ($daafid == '124') || ($daafid == '125') || ($daafid == '126') || ($daafid == '127') || ($daafid == '128') || ($daafid == '129') || ($daafid == '130') || ($daafid == '132') || ($daafid == '133')) {
        $valuecheck = true;
    }
}
if ($valuecheck == true) {
    echo $text_true;
}

提前多多感谢。

5 个答案:

答案 0 :(得分:1)

试试array_intersect。如果您要检查的ID是您的代码似乎指示的字符串,它也将起作用。当且仅当(字符串)$ elem1 ===(字符串)$ elem2时,array_intersect认为两个元素相等。换句话说:当字符串表示相同时。

$ids = Array(96, 97, 99, 122, ...);
if(array_intersect($ids, $prodcat));
    echo $text_true;
}

答案 1 :(得分:1)

我已经给出了2个示例,具体取决于您是否每次在数组中遇到类别ID时输出消息,或者只是在条件发生时显示的消息 at所有

// Array of category ID's to check against.
$daafids_array = [96,97,99,122,123,124,125,126,127,128,129,130,131,132,133];

// Initialise an empty array to hold the warning message if it occurs.
$warning = [];

// Loop through each $prodcat
foreach ($prodcat as $daafid) {
    // Check if the ID is within the array
    if (in_array($daafid, $daafids_array)) {
        // Build up the array with the message if it occurs.
        $warning[$daafid] = $text_true;
    }
}

// Show warnings and the corresponding category ID every time it's happened.
if (!empty($warning)) {
    foreach ($warning as $key => $value) {
        echo $value . ' - for category ID ' . $key . '<br>';
    }
}

// Just show 1 warning once if it *ever* encounters the condition
if (!empty($warning)) {
    echo $text_true;
}

如果$warning仍为空,则不会显示任何内容,因为无法显示任何内容(echo中未找到$prodcat中的ID)。

答案 2 :(得分:1)

我只想为ID制作白名单并使用in_array()

进行检查

你不需要检查是否,因为in_array总是返回true    或者是假的。

并且不要忘记使用=== for $ valuecheck === true

$valuecheck     = false;
$whiteListedIds = [96,97,99,122,123,124,125,126,127,128,129,130,131,132,133];

foreach ($prodcat as $daafid) {
   $valuecheck = in_array($daafid, $whiteListedIds);
}

if ($valuecheck === true) {
    echo $text_true;
}

答案 3 :(得分:0)

在Array函数中可能会更好。 参考:https://www.w3schools.com/php/func_array_in_array.asp

答案 4 :(得分:0)

你可以这样做。

解决方案1: 这里我们使用array_intersect来检查两个数组之间的公共值。

<?php

ini_set('display_errors', 1);
$valuecheck = false;
$daafids=array(96,97,99,122,123,124,125,126,127,128,129,130,131,132,133);
if(count(array_intersect($prodcat, $daafids))>0)
{
    $valuecheck=true;
}

这里我们使用in_array来搜索数组中的特定元素。

解决方案2:

<?php

ini_set('display_errors', 1);
$valuecheck = false;
$daafids=array(96,97,99,122,123,124,125,126,127,128,129,130,131,132,133);
foreach ($prodcat as $daafid) {
    if(in_array($daafid,$daafids)){
       $valuecheck=true;
       break;
    }
}
if ($valuecheck == true) {
    echo $text_true;
}