我有代码遍历一个本身就是数组的元素数组。该代码适用于2个或更多此类元素。但是,它不适用于一个数组“元素”(因为它开始遍历每个子元素)。
我的代码:
foreach($list as $element)
...
大部分时间,$ list是:
Array
(
[0] => Array
(
[a] => 'abc'
[b] => 'bcd'
)
[1] => Array
(
[a] => 'abc'
[b] => 'bcd'
)
)
ehich工作正常,但如果$ list是:
Array
(
[a] => 'abc'
[b] => 'bcd'
)
显然,我的代码现在会被搞砸,因为foreach将遍历'a'和'b'。
我想转换:
Array
(
[a] => 'abc'
[b] => 'bcd'
)
成:
Array
(
[0] => Array
(
[a] => 'abc'
[b] => 'bcd'
)
)
以最有效的方式!
答案 0 :(得分:1)
使用is_array()
(linked)检测传递的项目是否为数组。然后你可以相应地处理它。
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>';
答案 1 :(得分:0)
使用(数组)强制变量成为这样的数组:
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) */ }
答案 2 :(得分:0)
如您所知,foreach将迭代数组中的每个元素。如果数组为空,则不会执行任何操作。所以你可以简单地做$ var = array();设置一个空数组。
更好的解决方案是在执行foreach语句之前检查输入是否是数组,使用in_array()。
答案 3 :(得分:0)
小心如何插入第一个元素
永远不要让$ 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)
答案 4 :(得分:0)
结束检查单个元素,如果在底层存在特定的元素(已知仅存在于数组数组中),则执行以下操作:
$list = Array
(
[0] => $list
) ;