动态创建和访问数组

时间:2015-04-23 00:39:20

标签: php arrays

我试图用字符串动态创建一个数组。以下是我尝试使用的代码:

$users = get_users( $args_users );
$user_display = array(); 
$user_display_sorted = array();
foreach($users as $user){
    echo $user->ID;
    $first_name = get_user_meta($user->ID, 'first_name', true);
    $last_name = get_user_meta($user->ID, 'last_name', true);
    $name = $first_name.' '.$last_name;
    array_push($user_display, $user->ID);
    array_push($user_display, $name);
    $user_display_sorted = asort($user_display);
}
print_r($user_display);

当我打印数组时,我得到以下内容:
Array ( [0] => 5 [1] => Test Person[2] => 6 [3] => Adam Person )

我希望输出是这样的:
Array ( [0] [ID] => 5 [name] => Test Person; [1] [ID] => 6 [name] => Adam Person)

所以我想在user_display_sorted数组上做一个foreach循环并访问这样的变量:

foreach($user_display_sorted as $user_display_sort){
    echo $user_display_sort->ID;
}

我该怎么做?

3 个答案:

答案 0 :(得分:6)

您只需要分别推送要添加的数据数组而不是值:

foreach($users as $user){
    echo $user->ID;
    $first_name = get_user_meta($user->ID, 'first_name', true);
    $last_name = get_user_meta($user->ID, 'last_name', true);
    $name = $first_name.' '.$last_name;
    array_push($user_display, array('ID' => $user->ID, 'name' => $name));
    $user_display_sorted = asort($user_display);
}

继续评论询问如何排序 - 因为这是一个多维数组,您可以使用array_multisort() like this对其进行排序:

array_multisort($example, SORT_ASC, SORT_NATURAL, array_map(
    function($row) {
        return $row['name'];
    },
    $example
));

然而,正如Dagon在多个地方建议的那样,如果您的目标是按值排序,那么使用ID作为数组键将更容易整体,即从开始到结束:

foreach ($users as $user) {
    // ...
    $user_display[$user->ID] = $name;
}

// sort, maintaining keys
asort($user_display);

// output again if you want to
foreach ($user_display as $id => $name) {
    echo 'User ID ' . $id . ' has name ' . $name, PHP_EOL;
}

Demo here

对于排序参考,the PHP manual has a great table解释适合哪种功能。

答案 1 :(得分:1)

对于您想要的输出,请尝试以下操作:

$user_display[] = array('ID' => $user->ID, 'name' => $name);

而不是两条array_push行。对于排序显示,您可能希望使用usort并传递一个可调用函数来比较名称(或ID,取决于您想要做什么)。

答案 2 :(得分:0)

你快到了。

$userVar = new stdClass();
$userVar->ID = $user->ID;
$userVar->name = $name;
array_push($user_dispaly, $userVar);

如果用上面的方法替换双数组推送,则可以按照自己的方式访问项目。我正在做的就是创建一个对象,以便您可以使用箭头访问数据,然后将该对象添加到数组中。