如何将PHP阵列格式化为所需的结果



我需要在图表中显示一些数据。基本上,我有一个来自数据库的数组,看起来像

[
    [0] =>[
            [user_type] => 'Manager'
            [total_count] => 3
        ],

    [1] =>[
            [user_type] => 'Director'
            [total_count] => 2
        ]
]

还有一个user_type,即Trainee。如果用户Trainee具有0 Total_count,则不会出现在数组上方。所以我需要手动添加。因此,首先会检查3个用户types中上述数组中不存在哪些user_type。如果不存在,则只需要添加total_count 0即可。

最后我所需的数组看起来像

[
    ['labels'] =>['Manager','Director','Trainee],

    ['dataset'] => [ 3, 2, 0 ]
]

请注意,正确的顺序非常重要。因此,在上面的Array Manager中有3个,导演有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-如果学员在数组中不存在演示

案例2-如果经理和董事两者都不存在演示

案例3-如果不存在导演-Demo

这是您可以与array_combine和array_map一起使用splat(...(操作员

的脚本
$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 - 通过使用一个数组对键创建一个数组,而另一个数组则用于其值

注意: - 在array_map null中可以作为回调传递以执行zip的值 在多个阵列上操作。如果仅提供array1,array_map(( 将返回输入数组。简而言之

工作演示

输出: -

Array
(
    [labels] => Array
        (
            [0] => Manager
            [1] => Director
            [2] => Trainee
        )
    [dataset] => Array
        (
            [0] => 3
            [1] => 2
            [2] => 0
        )
)

尝试此

$arr = array_combine(['labels','dataset'], array_map(null, $arr));

可以添加不存在的user_type到Array

的函数
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','truchee','导演'

$arr = setUserType('Trainee', $arr);

或制作所有用户类型的数组并运行循环

foreach(['Manager', 'Trainee', 'Director'] as $type) {
 $arr = setData($type, $arr);   
}

打印并显示最终值

print_r($arr);
die();

演示https://3v4l.org/ubixn

尝试

$array = array();
foreach($yourArr as $row)
{
  $array['labels'][] = $row['user_type'];
  $array['dataset'][] = $row['total_count'];
}
print_r($array);

最新更新