0

我需要帮助来解决我大学考试中的问题。它是这样的:''PHP 中的函数检查关联数组中有多少整数,数据不是通过参数传输,而是作为全局变量传输''。谢谢!

4

2 回答 2

1

这是一个非常狡猾的问题。首先,PHP 不是强类型的,因此“这是一个整数”的概念并不明显。例如,以下数组中有多少个整数?

$array = array(5, "6", "7abc", 8.0, "9.0xyz", false);

如果我们严格地看类型,就会发现只有一个整数。如果我们松散地比较(即允许隐式类型强制),则有六个。您可以使用任意函数来确定在给定情况下某事物是否类似于整数。我觉得问题中没有足够的信息来给出一个答案,但我想你的讲座中给出了更多的背景信息。

这个问题还有另一个问题。“关联数组中有多少个整数”没有明确定义“in”,或者更确切地说,没有定义数组的真实结构。考虑以下。

class Foo {
    public $x;
    public $y;
    private $xy;
    public __construct($x, $y) { $this->x = $x; $this->y = $y; $this->xy = $x * $y; }
}

$array = array(
    10,
    new Foo(3, 4), 
    array(
        array(
            12,
        ),
        17,
        3
    )
);

你只考虑顶层还是递归下降?如果递归下降,是否还必须扫描对象内部?这些对象中的私有整数是否也在数组中?此外,递归下降的算法是否必须检测和避免循环?对于真正的需求,存在相当多的不确定性。

所以,要回答这个问题,你必须做出几个假设。我假设他们打算让您使用“is_int”函数或等效函数检查整数以确定变量的类型。其次,我假设他们打算让您只关注关联数组的顶层。我想这个练习是为了证明你对“foreach”的熟悉,如何访问全局变量,以及变量仍然有类型的现实,即使 PHP 允许你忽略它们。

“数据不通过参数传输,而是作为全局变量”听起来有点令人困惑,但这只是意味着您的函数将不接受任何参数。相反,它计算全局数组中的整数。在本例中,我将调用全局数组“$globalArray”。

$globalArray = array("k1" => "foo", "k2" => 5, "k3" => "bar", "k4" => 10);

function num_ints_in_array() {
    global $globalArray;
    $num_ints = 0;
    foreach ($globalArray as $v) {
        if (is_int($v)) ++$num_ints;
    }
    return $num_ints;
}

只是为了好玩而额外编辑:当然有很多方法。这个特殊的功能解决方案让我很喜欢。

function num_ints_in_array() {
    global $globalArray;
    return count(array_filter($globalArray, 'is_int'));
}
于 2012-10-28T08:47:57.377 回答
0

尝试以下操作:

<?php

$a[0] = 1;
$a[1] = 'aam';
$a[2] = 5;
$a[3] = 'c';
$result = count($a);
$totalints = 0;

for ($i = 0; $i < $result; $i++)
{
    if (is_int($a[$i]))
    {
        $totalints++;
    } 
}


echo "Total number of integers: " . $totalints;

?>
于 2012-10-28T08:24:42.667 回答