将PHP数组转换为新的数据结构 [英] Convert PHP array to new data-structure

查看:69
本文介绍了将PHP数组转换为新的数据结构的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个MYSQL查询,该查询返回以下PHP数组 $ result

I have a MYSQL query which returns the following PHP array $result:

[0] => Array (
    [resourceKey] => cloth
    [date] => 2020-09-06
    [quantity] => 8
    )
[1] => Array (
    [resourceKey] => ebony
    [date] => 2020-09-06
    [quantity] => 4
    )
[2] => Array (
    [resourceKey] => gems
    [date] => 2020-09-06
    [quantity] => 0
    )
[3] => Array (
    [resourceKey] => lead
    [date] => 2020-09-06
    [quantity] => 0
    )
[4] => Array (
    [resourceKey] => limestone
    [date] => 2020-09-06
    [quantity] => 8
    )
[5] => Array (
    [resourceKey] => cloth
    [date] => 2020-09-05
    [quantity] => 6
    )
[6] => Array (
    [resourceKey] => ebony
    [date] => 2020-09-05
    [quantity] => 3
    )
[7] => Array (
    [resourceKey] => gems
    [date] => 2020-09-05
    [quantity] => 0
    )
[8] => Array (
    [resourceKey] => lead
    [date] => 2020-09-05
    [quantity] => 0
    )
[9] => Array (
    [resourceKey] => limestone
    [date] => 2020-09-05
    [quantity] => 6
    )

我需要将其转换为使用jquery数据表显示的某种方式:

And I need to convert it is a certain way to display it with jquery Datatables:

$data= array(
    array("Date" => "2020-09-05","cloth"=>"6","ebony"=>"3","gems"=>"0","lead"=>"0","limestone"=>"6"),
    array("Date" => "2020-09-06","cloth"=>"8","ebony"=>"4","gems"=>"0","lead"=>"0","limestone"=>"8")
);

我已经尝试了一段时间,但无法获得迭代结果的好方法...

I've been trying for a while now but can't get a good way to iterate through the results...

我已经负责构建要传递给Datatables的列:

I have already taken care of building the columns to pass to Datatables:

$columns = array();
$columns[] = array('data' => 'Date', 'title' => 'Date');
foreach ($result as $key => $row_data) {
    $newResourceKey = $myUtilities->in_array_recursive($row_data['resourceKey'], $columns);
        
    if ($newResourceKey === FALSE) {    // Only if column name not yet in array
        $columns[] = array('data' => $row_data['resourceKey'], 'title' => $row_data['resourceKey']);
    }
        
}

这是我所做的许多事情的一个例子尝试过的:

This is an example of the many things I've tried:

$isDateInArray = $myUtilities->in_array_recursive($row_data['date'], $data);
if ($isDateInArray === FALSE) { // Only if Date is not in array yet
    array_push($data, array('Date' => $row_data['date'], $row_data['resourceKey'] => $row_data['quantity']));   // Push date and data
}
else {
    array_push($data, array($row_data['resourceKey'] => $row_data['quantity']));    // Only push data. Can't find a way to add it to existing Date array
}
    

更新:

public function in_array_recursive($needle, $haystack, $strict = false) {
    foreach ($haystack as $item) {
        if (($strict ? $item === $needle : $item == $needle) || (is_array($item) && $this->in_array_recursive($needle, $item, $strict))) {
            return true;
        }
    }

    return false;
}


推荐答案

您可以获得所需的结果通过下一个简单的数组转换:

You can get the desired result by next simple array transformation:

$res = [];
foreach ($result as $row) {
    $res[$row['date']][$row['resourceKey']] = $row['quantity'];
}

$final = [];

foreach ($res as $d=>$r) {
    array_push($final, array_merge(['date'=>$d], $r));
}
print_r($final);

在这里您可以尝试PHP代码

这篇关于将PHP数组转换为新的数据结构的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆