Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将数组转换为更具可读性和逻辑性的结构_Php_Arrays - Fatal编程技术网

Php 将数组转换为更具可读性和逻辑性的结构

Php 将数组转换为更具可读性和逻辑性的结构,php,arrays,Php,Arrays,我有一个大约200条记录的数组,如下所示: [0] => Array ( [sid] => 54 [sname] => vISL User book [sdate] => 2012-03-01 00:00:00 [pid] => 262 [cid] => 95 [at] =>

我有一个大约200条记录的数组,如下所示:

 [0] => Array
        (
            [sid] => 54
            [sname] => vISL User book
            [sdate] => 2012-03-01 00:00:00
            [pid] => 262
            [cid] => 95
            [at] => 
            [amount] => 0
            [psdate] => 2012-03-14 00:00:00
            [first_name] => Alan
            [last_name] => Darshan
            [pcid] => 95
            [cname] => Invisal
        )
 [1] => Array
        (
            [sid] => 54
            [sname] => vISL User book
            [sdate] => 2012-03-01 00:00:00
            [pid] => 263
            [cid] => 94
            [at] => 
            [amount] => 0
            [psdate] => 2012-03-14 00:00:00
            [first_name] => umed
            [last_name] => sarkar
            [pcid] => 92
            [cname] => Tisal
        )
我想将此数组转换为以下格式。原因是sid、sname和sdate组合可能有多个pid、cid和sdate值。。。cname:

[0] => Array
(
    [sid] => 54
    [sname] => vISL User book
    [sdate] => 2012-03-01 00:00:00
    [parr] => Array
            (
                [0] => Array 
                    (
                        [pid] => 262
                        [cid] => 95
                        [at] =>
                        [amount] => 0
                        [psdate] => 2012-03-14 00:00:00
                        [first_name] => Alan
                        [last_name] => Darshan
                        [pcid] => 95
                        [cname] => Invisal
                    )
                [1] => Array
                    (
                            [pid] => 262
                            [cid] => 95
                            [at] =>
                            [amount] => 0
                            [psdate] => 2012-03-14 00:00:00
                            [first_name] => Alan
                            [last_name] => Darshan
                            [pcid] => 95
                            [cname] => Invisal
                    )                       
            )
)
[1] => Array
(
        [sid] => 53
        [sname] => tebby book
        [sdate] => 2012-04-01 00:00:00
        [parr] => Array
        (
                [0] => Array
                (
                        [pid] => 162
                        [cid] => 15
                        [at] =>
                        [amount] => 1
                        [psdate] => 2012-03-14 00:00:00
                        [first_name] => edbey
                        [last_name] => balh
                        [pcid] => 93
                        [cname] => Ansasa
                )
                [1] => Array
                (
                        [pid] => 212
                        [cid] => 92
                        [at] =>
                        [amount] => 0
                        [psdate] => 2012-03-14 00:00:00
                        [first_name] => xyz
                        [last_name] => def
                        [pcid] => 91
                        [cname] => vsall
                )
        )
)

获得所需阵列结构的最佳方法是什么

我会说循环遍历数组,然后使用
var\u export
获得输出:

$tmp = Array();
$out = Array();
foreach($input as $row) {
    $tmp[$row['sid']][] = $row;
}
foreach($tmp as $key=>$rows) {
    $tmp[$key] = Array(
        "sid"  =>$rows[0]['sid'],
        "sname"=>$rows[0]['sname'],
        "sdate"=>$rows[0]['sdate'],
        "parr" =>Array()
    );
    foreach($rows as $row) {
        $tmp[$key]['parr'][] = Array(
            "pid"       =>$row['pid'],
            "cid"       =>$row['cid'],
            "at"        =>$row['at'],
            "amount"    =>$row['amount'],
            "psdate"    =>$row['psdate'],
            "first_name"=>$row['first_name'],
            "last_name" =>$row['last_name'],
            "pcid"      =>$row['pcid'],
            "cname"     =>$row['cname']
        );
    }
}
$out = array_values($tmp);
file_put_contents("tmp.php",'<?php $data = '.var_export($out,true).'; ?>');
$tmp=Array();
$out=Array();
foreach($行输入){
$tmp[$row['sid'][]=$row;
}
foreach($tmp作为$key=>$rows){
$tmp[$key]=数组(
“sid”=>$rows[0]['sid'],
“sname”=>$rows[0]['sname'],
“sdate”=>$rows[0]['sdate'],
“parr”=>数组()
);
foreach($行作为$行){
$tmp[$key]['parr'][]=数组(
“pid”=>$row['pid'],
“cid”=>$row['cid'],
“at”=>$row['at'],
“金额”=>$row[“金额”],
“psdate”=>$row['psdate'],
“first_name”=>$row['first_name'],
“姓氏”=>$row[“姓氏”],
“pcid”=>$row['pcid'],
“cname”=>$row['cname']
);
}
}
$out=数组_值($tmp);
文件内容(“tmp.php”,”;

我会说循环遍历数组,然后使用
var\u export
获得输出:

$tmp = Array();
$out = Array();
foreach($input as $row) {
    $tmp[$row['sid']][] = $row;
}
foreach($tmp as $key=>$rows) {
    $tmp[$key] = Array(
        "sid"  =>$rows[0]['sid'],
        "sname"=>$rows[0]['sname'],
        "sdate"=>$rows[0]['sdate'],
        "parr" =>Array()
    );
    foreach($rows as $row) {
        $tmp[$key]['parr'][] = Array(
            "pid"       =>$row['pid'],
            "cid"       =>$row['cid'],
            "at"        =>$row['at'],
            "amount"    =>$row['amount'],
            "psdate"    =>$row['psdate'],
            "first_name"=>$row['first_name'],
            "last_name" =>$row['last_name'],
            "pcid"      =>$row['pcid'],
            "cname"     =>$row['cname']
        );
    }
}
$out = array_values($tmp);
file_put_contents("tmp.php",'<?php $data = '.var_export($out,true).'; ?>');
$tmp=Array();
$out=Array();
foreach($行输入){
$tmp[$row['sid'][]=$row;
}
foreach($tmp作为$key=>$rows){
$tmp[$key]=数组(
“sid”=>$rows[0]['sid'],
“sname”=>$rows[0]['sname'],
“sdate”=>$rows[0]['sdate'],
“parr”=>数组()
);
foreach($行作为$行){
$tmp[$key]['parr'][]=数组(
“pid”=>$row['pid'],
“cid”=>$row['cid'],
“at”=>$row['at'],
“金额”=>$row[“金额”],
“psdate”=>$row['psdate'],
“first_name”=>$row['first_name'],
“姓氏”=>$row[“姓氏”],
“pcid”=>$row['pcid'],
“cname”=>$row['cname']
);
}
}
$out=数组_值($tmp);
文件内容(“tmp.php”,”;

我假定您从联接查询中获得这些数组结果。 我认为如果你把这些数据从数据库中分离出来,那就容易多了。 因此,您的问题类似于此线程:

无论如何,您可以尝试以下方法:

$pk = 'sid';                // record pk
$pkKeys = array(
    'pid' => array(         // subRecord pk
        'parr' => array(    // subRecords array key => array(subRecord names)
            'pid',
            'cid',
            'amount',
            'psdate',
            'pcid',
        ),
    ),
);

$resultArr = array();
array_walk($records, 
    function ($val, $key) use (&$resultArr, $pkKeys, $pk) {
        $mapped = array();
        foreach ($val as $itemKey => $item) {
            if (in_array($itemKey, array_keys($pkKeys))) {
                $populateData = $pkKeys[$itemKey];
                $subRecordPk = key($populateData);
                foreach($populateData[$subRecordPk] as $populateKey) {
                    if ($subRecordPk !== $populateKey) {
                        $resultArr[$val[$pk]][$subRecordPk][$val[$itemKey]][$populateKey] 
                            = $val[$populateKey];
                        $mapped[$populateKey] = $populateKey;
                    }
                }
            } else if (!in_array($itemKey, $mapped)){
                $resultArr[$val[$pk]][$itemKey] = $val[$itemKey];
            }
        }
    }
);

我假定您从联接查询中获得这些数组结果。 我认为如果你把这些数据从数据库中分离出来,那就容易多了。 因此,您的问题类似于此线程:

无论如何,您可以尝试以下方法:

$pk = 'sid';                // record pk
$pkKeys = array(
    'pid' => array(         // subRecord pk
        'parr' => array(    // subRecords array key => array(subRecord names)
            'pid',
            'cid',
            'amount',
            'psdate',
            'pcid',
        ),
    ),
);

$resultArr = array();
array_walk($records, 
    function ($val, $key) use (&$resultArr, $pkKeys, $pk) {
        $mapped = array();
        foreach ($val as $itemKey => $item) {
            if (in_array($itemKey, array_keys($pkKeys))) {
                $populateData = $pkKeys[$itemKey];
                $subRecordPk = key($populateData);
                foreach($populateData[$subRecordPk] as $populateKey) {
                    if ($subRecordPk !== $populateKey) {
                        $resultArr[$val[$pk]][$subRecordPk][$val[$itemKey]][$populateKey] 
                            = $val[$populateKey];
                        $mapped[$populateKey] = $populateKey;
                    }
                }
            } else if (!in_array($itemKey, $mapped)){
                $resultArr[$val[$pk]][$itemKey] = $val[$itemKey];
            }
        }
    }
);

您是如何读取数据的?答案通常是您必须自己创建此自定义数组。您是如何读取数据的?答案通常是您必须自己创建此自定义数组。