我有以下数组。
Array (
[group] => 2
[group_com] => 2764800
[group_dom] => 1423296000
[user0] => user2013
[login0] => 1394481064
[logoff0] => 1394481112
[duration0] => 45
[user1] => user2014
[login1] => 1394481064
[logoff1] => 1394481112
[duration1] => 320
[user2] => user2015
[login2] => 1394481064
[logoff2] => 394481112
[duration2] => 120
)
['group']
、['group_com']
、['group_dom']
密钥是数组中的单个密钥,我可以使用以下代码读取[group]
密钥数据。
$group=$result['group'];
$loginstart=$result['group_com'];
$loginend_tip=$result['group_dom'];
但[user0]
、[user1]
、[user2]
密钥在数组中可以是更少或更多。那么,如何使用循环获取所有[user]
键的值呢?循环将仅用于[user]
密钥,而不用于[group]
密钥。或者还有另一种方法。请提供一些指导。
谢谢你,
您必须循环遍历所有数组,并根据您的需求进行筛选,如下所示:
foreach($myArray as $key=>$value){
if(substr($key,0,4)!=='user'){
continue;
}else{
//Here you have keys that start with 'user' only
}
}
请注意,不需要else{}
部分,因为只有在由于continue导致语句为false的情况下,才会执行if
之后的任何代码,但它更具可读性
如果您需要经常做这种事情,有时在组中,有时在用户中,您可以使用多维数组来简化您的工作。
在我看来,你最好使用这样的数组:
Array (
[group] => 2
[group_com] => 2764800
[group_dom] => 1423296000
[users] => array (
array(
[user]=>user2013
[login]=>user2013
[logoff]=>user2013
[duration]=>user2013
)
array(
[user] => user2014
[login] => 1394481064
[logoff] => 1394481112
[duration] => 320
)
)
)
通过这种方式,您可以轻松地在$array['users']上循环,以获得您想要的关于每个用户的数据,而不需要使用递增的字符串键进行艰苦的训练。
过滤数组键以获得用户数组:
$users = array_filter(array_keys($yourArray), function($key) {
return substr($key,0,4)=="user";
});
$users = array_values($users);
var_dump($users);
如果你这样做
$group=$result['group'];
array_shift($result);
$loginstart=$result['group_com'];
array_shift($result);
$loginend_tip=$result['group_dom'];
array_shift($result);
现在在$result
中,您将只有用户变量。你可以每4次循环一次,并将其存储在另一个阵列中
$users = array();
for($i=0;$i<count($result);$i+4) {
$user = $result["user".$i];
$login = $result["login".$i + 1];
$logoff = $result["logoff".$i + 2];
$duration = $result["duration".$i + 3];
$users[] = array($user, $login, $logoff, $duration);
}