【发布时间】:2011-08-25 04:50:28
【问题描述】:
我希望能够将数组传递给函数,并根据它是“列表”样式数组还是“散列”样式数组让函数表现不同。例如:
myfunc(array("One", "Two", "Three")); // works
myfunc(array(1=>"One", 2=>"Two", 3=>"Three")); also works, but understands it's a hash
可能会输出如下内容:
One, Two, Three
1=One, 2=Two, 3=Three
ie:当函数“检测到”它被传递一个散列而不是一个数组时,它会做一些不同的事情。你能说我来自 Perl 背景,其中 %hashes 是来自 @arrays 的不同引用吗?
我相信我的示例很重要,因为我们不能只测试键是否为数字,因为您很可能在哈希中使用数字键。
我特别希望避免使用 myfunc(array(array(1=>"One"), array(2=>"Two"), array(3=>"Three"))) 的混乱构造
【问题讨论】:
-
寻找这样的东西? stackoverflow.com/questions/173400/…
-
有趣的问题。不幸的是,PHP 无法区分
array('a','b','c')和array(0=>'a',1=>'b',2=>'c')... -
PHP 将始终将数字键
array("1" => "1")存储为整数。检测不出来。您只能探测不断增长的键以区分真实列表和索引数组。 -
正确。不幸的是,它不能区分“简单”数组和以数字字符串为键的数组(请参阅我的回答)。