如何强制元素为数组形式(在php中)



我有一段代码,它在元素数组上迭代,这些元素本身就是数组。对于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
  ) ;

相关内容

  • 没有找到相关文章

最新更新