如何将 php 数组格式化为所需结果
How to format an php array to desired result
我需要在图表中显示一些数据。基本上我有一个来自数据库的数组,看起来像这样-
[
[0] =>[
[user_type] => 'Manager'
[total_count] => 3
],
[1] =>[
[user_type] => 'Director'
[total_count] => 2
]
]
还有一个 user_type
是 Trainee
。如果用户 Trainee
有 0
Total_count
它不会出现在上面的数组中。所以我需要手动添加。因此,首先将检查 3 user_types 中的哪个 user_type
不存在于上述数组中。如果不存在则只需添加 total_count
0
。
最后我想要的数组应该是这样的-
[
['labels'] =>['Manager','Director','Trainee],
['dataset'] => [ 3, 2, 0 ]
]
这里请注意,正确的顺序非常重要。所以在上面的数组中,Manager 有 3 个,Director 有 2 个,Trainee 有 0 个总数。
提前致谢!
这是您可以与 array_combine 和 array_map 以及 splat(...) operator
一起使用的脚本
$arr = array_combine(['labels','dataset'],array_map(null, ...$arr));
if(!in_array('Trainee',$arr['labels'])){
array_push($arr['labels'],'Trainee');
array_push($arr['dataset'],0);
}
print_r($arr);die;
array_combine — 通过使用一个数组作为键,另一个数组作为值来创建一个数组
Note:- In array_map NULL can be passed as a value to callback to perform a zip
operation on multiple arrays. If only array1 is provided, array_map()
will return the input array. In short to perform transpose of array operation
输出:-
Array
(
[labels] => Array
(
[0] => Manager
[1] => Director
[2] => Trainee
)
[dataset] => Array
(
[0] => 3
[1] => 2
[2] => 0
)
)
试试下面的代码也许会有帮助。
/*
using array column will get the result in
Array ( [Manager] => 3 [Director] => 2 )
*/
$array_column = array_column($array, 'total_count', 'user_type');
//Create new array like below
$add_array = array('Manager'=>'0', 'Director'=>'0', 'Trainee'=>'0',);
//using array_merge merge add_array and array_column
$new_array = array_merge($add_array, $array_column);
//using array_walk_recursive get the requird result
array_walk_recursive($new_array, function($item, $key) use (&$final_array){
$final_array['labels'][]=$key;
$final_array['dataset'][]=$item;
});
echo "<pre>";
print_r($final_array);
?>
情况 1 - 如果实习生不在数组中
DEMO
情况 2 - 如果经理和主管都不在数组中
DEMO
情况 3- 如果主管不在 - DEMO
试试这个
$arr = array_combine(['labels','dataset'], array_map(null, $arr));
创建一个将不存在的user_type添加到数组
中的函数
function setUserType($userType, $array) {
if(!in_array($userType, $array['labels'])){
array_push($array['labels'], $userType);
array_push($array['dataset'], 0);
}
return $array;
}
通过任何 user_type 调用函数,例如 'Manager'、'Trainee'、'Director'
$arr = setUserType('Trainee', $arr);
或者制作一个所有用户类型的数组和运行一个循环
foreach(['Manager', 'Trainee', 'Director'] as $type) {
$arr = setData($type, $arr);
}
打印并显示最终值
print_r($arr);
die();
试一试
$array = array();
foreach($yourArr as $row)
{
$array['labels'][] = $row['user_type'];
$array['dataset'][] = $row['total_count'];
}
print_r($array);
我需要在图表中显示一些数据。基本上我有一个来自数据库的数组,看起来像这样-
[
[0] =>[
[user_type] => 'Manager'
[total_count] => 3
],
[1] =>[
[user_type] => 'Director'
[total_count] => 2
]
]
还有一个 user_type
是 Trainee
。如果用户 Trainee
有 0
Total_count
它不会出现在上面的数组中。所以我需要手动添加。因此,首先将检查 3 user_types 中的哪个 user_type
不存在于上述数组中。如果不存在则只需添加 total_count
0
。
最后我想要的数组应该是这样的-
[
['labels'] =>['Manager','Director','Trainee],
['dataset'] => [ 3, 2, 0 ]
]
这里请注意,正确的顺序非常重要。所以在上面的数组中,Manager 有 3 个,Director 有 2 个,Trainee 有 0 个总数。
提前致谢!
这是您可以与 array_combine 和 array_map 以及 splat(...) operator
一起使用的脚本$arr = array_combine(['labels','dataset'],array_map(null, ...$arr));
if(!in_array('Trainee',$arr['labels'])){
array_push($arr['labels'],'Trainee');
array_push($arr['dataset'],0);
}
print_r($arr);die;
array_combine — 通过使用一个数组作为键,另一个数组作为值来创建一个数组
Note:- In array_map NULL can be passed as a value to callback to perform a zip operation on multiple arrays. If only array1 is provided, array_map() will return the input array. In short to perform transpose of array operation
输出:-
Array
(
[labels] => Array
(
[0] => Manager
[1] => Director
[2] => Trainee
)
[dataset] => Array
(
[0] => 3
[1] => 2
[2] => 0
)
)
试试下面的代码也许会有帮助。
/*
using array column will get the result in
Array ( [Manager] => 3 [Director] => 2 )
*/
$array_column = array_column($array, 'total_count', 'user_type');
//Create new array like below
$add_array = array('Manager'=>'0', 'Director'=>'0', 'Trainee'=>'0',);
//using array_merge merge add_array and array_column
$new_array = array_merge($add_array, $array_column);
//using array_walk_recursive get the requird result
array_walk_recursive($new_array, function($item, $key) use (&$final_array){
$final_array['labels'][]=$key;
$final_array['dataset'][]=$item;
});
echo "<pre>";
print_r($final_array);
?>
情况 1 - 如果实习生不在数组中 DEMO
情况 2 - 如果经理和主管都不在数组中 DEMO
情况 3- 如果主管不在 - DEMO
试试这个
$arr = array_combine(['labels','dataset'], array_map(null, $arr));
创建一个将不存在的user_type添加到数组
中的函数function setUserType($userType, $array) {
if(!in_array($userType, $array['labels'])){
array_push($array['labels'], $userType);
array_push($array['dataset'], 0);
}
return $array;
}
通过任何 user_type 调用函数,例如 'Manager'、'Trainee'、'Director'
$arr = setUserType('Trainee', $arr);
或者制作一个所有用户类型的数组和运行一个循环
foreach(['Manager', 'Trainee', 'Director'] as $type) {
$arr = setData($type, $arr);
}
打印并显示最终值
print_r($arr);
die();
试一试
$array = array();
foreach($yourArr as $row)
{
$array['labels'][] = $row['user_type'];
$array['dataset'][] = $row['total_count'];
}
print_r($array);