0

我有一个函数,它将一个数组作为参数。

function addSearch($arr) { }

如何检查该函数是否仅使用值定义了数组

array('option1', 'option2', ...);

或作为键值对:

array('option1' => 'First Option', 'option2' => 'Second Option', ...)

我想要实现的是,您可以将搜索文件与标签一起传递,或者只传递搜索字段,在这种情况下,字段名称也将成为标签。

所以我需要改变一个数组,它的值只有$array['option1'] = 'option1';

任何想法如何实现这一目标?

4

4 回答 4

6

您无法知道数组是如何定义的。两种数组都是一样的,它们都有键和值。不同之处在于“无键数组”使用自动生成的数字键,而在其他示例中,键显式作为字符串给出。这两个数组是相同的:

array('option1', 'option2')
array(0 => 'option1', 1 => 'option2')

您甚至可以将两者混合使用:

array('foo', 'bar' => 'baz', 42 => 'qux')

因此,您真正感兴趣的是键是否为字符串:

foreach ($options as $key => $value) {
    if (is_string($key)) {
        // string => value pair
    } else {
        // numerically indexed pair
        // note: could still have been explicitly defined, who knows?
    }
}
于 2013-08-08T11:54:13.800 回答
2

这将检查您的数组是否是关联的

function is_associative($array) {
    return array_values($array) !== $array;
}
于 2013-08-08T11:57:39.987 回答
1

另一种解决方案

<?php
function isAssociative($arr)
{
    return array_keys($arr) !== range(0, count($arr) - 1);
}
?>
于 2013-08-08T11:56:16.853 回答
1

我必须和@phranx一起去这个。

假设你有这个 数组('1'=>'Under', '2'=>'Over')

此数组中的键将被评估为整数。

最好的方法是确定键是否是键:值对是检查数组的是否等于数组本身。

于 2016-09-05T17:57:07.527 回答