如果将数组定义为键值对,如何检查?

时间:2013-08-08 11:49:24

标签: php arrays

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

function addSearch($arr) { }

如何检查该函数是否只使用值

定义了数组
array('option1', 'option2', ...);

或作为键值对:

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

我最喜欢的是,您既可以将搜索文件与标签一起传递,也可以只传递搜索字段,在这种情况下,字段名称也将成为标签。

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

任何想法如何实现这个?

4 个答案:

答案 0 :(得分:5)

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

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?
    }
}

答案 1 :(得分:2)

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

function is_associative($array) {
    return array_values($array) !== $array;
}

答案 2 :(得分:1)

另一种解决方案

<?php
function isAssociative($arr)
{
    return array_keys($arr) !== range(0, count($arr) - 1);
}
?>

答案 3 :(得分:1)

我必须在@phranx上使用这个。

让我们说你有这个 数组(&#39; 1&#39; =&gt;&#39; Under&#39;,&#39; 2&#39; =&gt;&#39; Over&#39;) < / p>

此数组中的键将被计算为整数。

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