我有一个像:
这样的数组$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']
。
有没有办法让一个结果相信它是一个多维数组?
答案 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 = 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);