繁体   English   中英

用PHP组数组结构

[英]Group array structure with PHP

我需要从这个数组重新排列:

Array
(
[0] => Array
    (
        [0] => Qty
        [1] => 1
        [2] => 3
    )

[1] => Array
    (
        [0] => Item No
        [1] => ABC345
        [2] => FGR8765
    )

[2] => Array
    (
        [0] => Description
        [1] => Lores ipsum
        [2] => Dolores sit amet
        [3] => quasi architecto beatae:
        [4] => sed quia consequuntur
        [5] => consectetur, adipisci velit
    )

[3] => Array
    (
        [0] => Price
        [1] => $10
        [2] => $20
    )

变成这样:

 Array
 (
   [0] => array(
     'Qty' => 1,
     'Item No' => 'ABC345',
     'Description' => 'Lores ipsum',
     'Price' => $10
   )
   [1] => array(
     'Qty' => 3,
     'Item No' => 'FGR8765',
     'Description' => 'Dolores sit amet quasi architecto beatae sed quia consequuntur consectetur, adipisci velit',
     'Price' => $20
   )
)

每个数组的0索引是键名称:数量,项目编号,描述,价格。 如果索引大于第一个数组的编号,则合并该值,如描述键所示,将数组编号3、4、5的值合并到数组编号2。

到目前为止,这是我的尝试:

$itemList = array();
foreach($result as $i => $valueKey)
{
    if($i == 0) {
      $max = count($valueKey);
    }
    foreach($valueKey as $y => $item)
    {
        $itemList[] = array(
            $item[0] => $item
        );
    }
}
$input = array(/* input array */);
$output = array(/* output array */);

foreach ($input as $property)
{
    $propcount = count($property);
    for ($i = 1; $i < $propcount; $i++)
        $output[$i - 1][$property[0]] = $property[$i];
}

您可以这样做:

$input = [
    [ "Qty", 1, 3 ],
    [ "Item No", "ABC345", "FGR8765" ],
    [ "Description", "Lores ipsum", "Dolores sit amet", "quasi architecto beatae:", "sed quia consequuntur", "consectetur, adipisci velit" ],
    [ "Price", "$10", "$20" ]
];

$max = count($input[0]) - 1;
$output = array_reduce(
    $input,
    function (array $out, array $items) use ($max) {
        $header = array_shift($items);
        $redundant = array_splice($items, $max);

        foreach ($items as $idx => $value) {
            $out[$idx][$header] = $value;
        }

        foreach ($redundant as $value) {
            $out[$idx][$header] .= ' ' . $value;
        }

        return $out;
    },
    []
);

var_dump($output);

我还建议将它放在一个函数中并带有一个好名字。

嗨,我喜欢这将为您提供帮助:)

$result = Array
(
    Array
    (
        "Qty", 1, 3
    ),
    Array
    (
        "Item No", "ABC345", "FGR8765"
    ),
    Array
    (
        "Description", "Lores ipsum", "Dolores sit amet", "quasi architecto beatae:", "sed quia consequuntur", "consectetur, adipisci velit"
    ),
    Array
    (
        "Price", "$10", "$20"
    )
);

$total_result = count($result);
$itemList = $final_result = array();
$i = 1;
foreach ($result as $res) {
    foreach ($result as $item) {
        if (isset($item[0])) {
            foreach ($item as $key => $val) {
                          $itemList[$item[0]] = ($item[$i]=="")?0:$item[$i];
            }
        }
    }
    $i++;
    $final_result[] = $itemList;
}
echo '<pre>';
print_r($final_result);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM