循环遍历一个数组,就像它是一个多维数组一样

时间:2016-10-24 13:27:33

标签: php arrays multidimensional-array foreach

我有一个像:

这样的数组
$array = array(
 'name' => 'Humphrey',
 'email' => 'humphrey@wilkins.com
);

这是通过从数据库获取的函数检索的。如果检索到多个结果,则看起来像:

$array = array(
 [0] => array(
  'name' => 'Humphrey1',
  'email' => 'humphrey1@wilkins.com'
 ),
 [1] => array(
  'name' => 'Humphrey2',
  'email' => 'humphrey2@wilkins.com'
 )
);

如果返回第二个,我可以做一个简单的foreach($array as $key => $person),但是如果只返回一个结果(第一个例子),我就不能在这个上运行一个foreach,因为我需要访问喜欢:foreach循环中的$person['name']

有没有办法让一个结果相信它是一个多维数组?

5 个答案:

答案 0 :(得分:1)

试试这个:

if(!is_array($array[0])) {
    $new_array[] = $array;
    $array = $new_array;
}

答案 1 :(得分:0)

我强烈建议不管返回多少元素,都要使数据的结构相同。它将有助于记录术语,这必须在调用函数的任何地方完成,这似乎是浪费。

您可以检查key是否存在,并根据该条件执行某些逻辑。

if(array_key_exists("name", $array){
    //There is one result
    $array['name']; //... 
} else {
    //More then one
    foreach($array as $k => $v){
        //Do logic
    }
}

第二个你的密钥中的密钥将是索引。

答案 2 :(得分:0)

根据this,尝试:

function isAssoc(array $arr)
{
    if (array() === $arr) return false;
    return array_keys($arr) !== range(0, count($arr) - 1);
}

if(isAssoc($array)){
    $array[] = $array;
}

答案 3 :(得分:0)

首先检查给定数组中是否存在数组键'name'。 如果是,那么它不是一个多维数组。

以下是如何使其成为多维的:

match y with T1 -> ... | T2 -> ...

现在你可以循环遍历数组,假设它是一个多维数组。

if(array_key_exists("name",$array))
{
 $array = array($array);
}

答案 4 :(得分:0)

原因可能是因为您在数据库上使用了fetch()或fetchAll()。无论如何,有些解决方案使用了一些技巧:

$arr = !is_array($arr[0]) ? $arr : $arr[0]; 

is_array($arr[0]) && ($arr = $arr[0]); 

array_walk_recursive()

还有其他选项
$array = array(
 array(
  'name' => 'Humphrey1',
  'email' => 'humphrey1@wilkins.com'
 ),
  array(
  'name' => 'Humphrey2',
  'email' => 'humphrey2@wilkins.com'
 )
);

$array2 = array(
  'name' => 'Humphrey2',
  'email' => 'humphrey2@wilkins.com'
 );

$print = function ($item, $key) {
   echo $key . $item .'<br>';
};

array_walk_recursive($array, $print);
array_walk_recursive($array2, $print);