如何使用php读取循环中的部分数组数据

如何使用php读取循环中的部分数组数据,php,Php,我有以下数组 Array ( [group] => 2 [group_com] => 2764800 [group_dom] => 1423296000 [user0] => user2013 [login0] => 1394481064 [logoff0] => 1394481112 [duration0] => 45 [user1] => user2014

我有以下数组

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\u com']
['group\u 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'],以获得您想要的关于每个用户的数据,而无需使用递增的字符串键进行硬体操。

如果您这样做

$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);
}
$users=array();

对于($i=0;$i筛选数组键以获取用户数组:

$users = array_filter(array_keys($yourArray), function($key) {
    return substr($key,0,4)=="user";
});
$users = array_values($users);
var_dump($users);

如果将数组重新构造为自身包含一个users数组,而不是user1、user2..usern键,则可以使您的生活更加轻松。Lookout,使用
array\u shift
删除数组的第一个元素。仅当数组按此顺序保留键时,此操作才会起作用,任何更改都会破坏一切。您的解决方案可能会失败使用
unset($result['group'])
工作。另外,$result[0]不存在,您的for循环已完全中断。您是对的,我没有注意循环。我将编辑答案。至于数组\u shift,数组不应该更改,因此这可能是一种方法,可以帮助您创建代码,同时希望其余部分保持不变,这是一个坏建议…我们不知道数组是如何构造的。它很好注意,这会使你丢失数组中的所有数据……因此你必须使用两个数组,一个用于用户,一个用于总数。@Salketer:“丢失数据”是什么意思?
$users
现在确实包含原始数组中所有用户的列表。原始数组中没有丢失任何内容。因此,我说您将有两个数组来处理而不是只保留一个。是的,这一切都归结于他应该如何使用数据。我提供了一个解决方案来获取所有用户。foreach正在旋转循环中的键数数组,它没有给出正确的结果。如果我不完全理解你说的话,请给出建议。是的,foreach会旋转数组中的所有键,如果键以user开头,则if语句会过滤。