我有一段代码,它在元素数组上迭代,这些元素本身就是数组。对于2个或更多这样的元素,代码工作得很好。然而,它并不适用于一个数组"元素"(因为它开始遍历它的每个子元素)。
我代码: foreach($list as $element)
...
大多数时候,$list是:
Array
(
[0] => Array
(
[a] => 'abc'
[b] => 'bcd'
)
[1] => Array
(
[a] => 'abc'
[b] => 'bcd'
)
)
可以正常工作,但是如果$list是:
Array
(
[a] => 'abc'
[b] => 'bcd'
)
显然我的代码现在会搞砸,因为foreach会遍历'a'和'b'。
我想转换:
Array
(
[a] => 'abc'
[b] => 'bcd'
)
为:
Array
(
[0] => Array
(
[a] => 'abc'
[b] => 'bcd'
)
)
以最有效的方式!
使用is_array()
(已链接)检测传递的项是否为数组。然后您可以相应地处理它。
foreach($somethingarray['something'] as $something) {
if(is_array($something)) {
// do something with array
} else {
// do something with non array
}
}
在http://www.phplint.com/上运行此命令,查看处理您的评论的结果@Frank d
echo '<pre>';
$var = array( 'my_var' => array( 'my_value' ) );
var_dump( $var );
$var2 = array( $var );
var_dump( $var2 );
echo '</pre>';
使用(array)强制变量为数组,如下所示:
foreach ((array)$somethingarray['something'] as $something) { /* $something is first array's element... And the only if you casted your "not-array" into an array by (array) */ }
如您所知,foreach将遍历数组中的每个元素。如果数组为空,它不会做任何事情。你可以简单地输入$var = array ();设置一个空数组。
一个更好的解决方案是在执行foreach语句之前检查输入是否是一个数组,使用in_array()。
要注意如何插入第一个元素
永远不要让$list为
Array
(
[a] => 'abc'
[b] => 'bcd'
)
//create your first element as
$firstElement=array('a'=>'abc','b'=>'bcd');
$list[] = $firstElement;
// or in one sentence: $list[] = array('a'=>'abc', 'b'=>'bcd');
// call your function here for one elment array
yourFunc($list)
// and so on the same way (how did you made the two elements $list array?)
$secondElement = array('a'=>'abc', 'b'=>'bcd');
$list[] = $secondElement;
// call your function here for two elments array
yourFunc($list)
最后检查单个元素,如果一个特定的元素(已知只存在于数组的数组中)存在于底层,则执行如下操作:
$list = Array
(
[0] => $list
) ;