我试图用字符串动态创建一个数组。以下是我尝试使用的代码:
$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;
}
我该怎么做?
答案 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;
}
对于排序参考,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);
如果用上面的方法替换双数组推送,则可以按照自己的方式访问项目。我正在做的就是创建一个对象,以便您可以使用箭头访问数据,然后将该对象添加到数组中。