如何使用现有数组创建动态数组

时间:2018-11-04 08:56:15

标签: php arrays

我在下面有数据数组。

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [rating] => 4
                    [review] => nice
                )
            [1] => Array
                (
                    [rating] => 2
                    [review] => good
                )
        )

)

我们自定义上述数组,并且需要自定义array。 需要放在数组下面。阵列始终需要5对1的键,因为我正在使用此阵列进行评分和评价功能。

Array
(
    [0] => Array
        (
            [5] => Array
                (
                    [rating] => 0
                    [review] => ""
                )
            [4] => Array
                (
                    [rating] => 4
                    [review] => nice
                )
            [3] => Array
                (
                    [rating] => 0
                    [review] => ""
                )
            [2] => Array
                (
                    [rating] => 2
                    [review] => "good"
                )        

            [1] => Array
                (
                    [rating] => 0
                    [review] => ""
                )
        )
)

2 个答案:

答案 0 :(得分:1)

我设法解决了。请根据输出找到以下解决方案。

$arr1 = array(array("rating"=>4,"review"=>"nice"),array("rating"=>2,"review"=>"good"));
$final =a rray();
for ($i=5; $i>=1; $i--) {   
    foreach ($arr1 as $key =>$val) {
        if ($val['rating']==$i) {
            $final[$i] = array("rating"=>$val['rating'],"review"=>$val['review']); 
            break;
        } else {
            $final[$i] = array("rating"=>0,"review"=>""); 
        }
    }
}
print_r($final);

答案 1 :(得分:0)

  • 迭代每个顶级数组(如果您没有具有多个顶级数组,则应考虑重组数组结构以更简洁)
  • 在level2数组上调用array_column(),以便将rating的值分配为其各自的子数组的键。
  • 从5到1的降序迭代,同时有条件地将数据保存到输出数组。

代码:(Demo

$input = [
    [
        ['rating' => 4, 'review' => 'nice'],
        ['rating' => 2, 'review' => 'good']
    ]
];

foreach ($input as $x => $level2) {
    $keyed = array_column($level2, null, 'rating');  // setup more efficient lookup
    for($i = 5 ; $i > 0 ; --$i) {
        $result[$x][$i] = isset($keyed[$i]) ? $keyed[$i] : ['rating' => 0, 'review' => ''];
    }
}
var_export($result);
// output is as desired
相关问题