【问题标题】:Check if array values are ints [duplicate]检查数组值是否为整数 [重复]
【发布时间】:2012-09-10 18:26:32
【问题描述】:

可能重复:
More concise way to check to see if an array contains only numbers (integers)

有没有办法检查一维数组中的所有值是否都是ints?

我能做的最好的事情就是

function checkArray($array) {

    foreach($array as $value) {

        if (!is_int($value)) return false;
    }

    return true;
}

我想知道是否有更简洁/预先构建的方式,例如我可能不知道的is_int_array()

【问题讨论】:

  • 比循环和检查更好的方法?
  • 当你说“我想做一些涉及数组所有元素的操作”时,可以肯定的是,你能做的最好的事情就是O(n)。如果你做得比这更好,这意味着你有一些其他数据用于存储信息,而实际信息少于O(n)(但你仍然需要O(n) 来获取该信息)。这意味着:不,你不能做得更好。唯一的方法是检查何时插入它们,但实际上您正在执行相同数量的操作,只是在填充时循环一次。因此,任何解决方案实际上都具有相同的复杂性,可能开销会少一些。
  • 我几乎敢打赌,你的应用程序的性能瓶颈不是循环遍历数组以查看它们是否由整数元素组成。

标签: php arrays validation


【解决方案1】:

我想你永远无法击败O(n),因为需要检查所有元素是否符合规则。下面检查每个元素一次O(n) 并将其删除,如果它不是整数则进行简单比较。

不过,存储复杂度仍然会稍大一些(需要存储过滤后的数组)。

O(n) 是复杂度的表示,在这种情况下,复杂度是n(数组中元素的数量),因为每个元素都必须查看一次。

例如,如果您想将每个数字与其他数字相乘,则复杂度约为 O(n^2),因为对于每个元素,您必须查看每个其他元素(尽管这是一个糟糕的示例)

请参阅this guide 了解有关 Big O Notation 的详细信息

不过试试下面的(改编自previous question

if($only_integers === array_filter($only_integers, 'is_int')); // true
if($letters === array_filter($letters, 'is_int')); // false

你可以这样做

/**
 * Test array against provided filter
 * testFilter(array(1, 2, 'a'), 'is_int'); -> false
 */
function testFilter($array, $test) {
    return array_filter($array, $test) === $array;
}

【讨论】:

  • -1 如果您指的是另一个答案,则不是答案。
  • @SteveRobbins O(n) 是用于表示处理时间的符号
  • @SteveRobbins - 这是big O Notation 的一个实例。换句话说,它是说一种算法比另一种算法更快的意思的一部分。为什么不知道大 O 符号就问算法速度的问题?!​​
  • @njk 我不同意,我在此问题的其他答案之上添加了更多信息
  • @PezCuckow 抱歉,我仍然看到您的原始答案只是引用了另一个答案。
猜你喜欢
  • 2012-08-27
  • 1970-01-01
  • 2011-03-30
  • 2012-01-09
  • 1970-01-01
  • 2021-07-14
  • 1970-01-01
相关资源
最近更新 更多