【问题标题】:php change item array to rowphp将项目数组更改为行
【发布时间】:2016-09-06 04:36:22
【问题描述】:

为此:

$input = [
'class a' => [
    'A' => [
        'name' => 'Allen',
        'score' => 90   
    ],
    'B' => [
        'name' => 'Bill',
        'score' => 80
    ]
],
'class b' => [
    'A' => [
        'name' => 'Cate',
        'score' => 90   
    ],
    'B' => [
        'name' => 'Dave',
        'score' => 80
    ]
],
'class c' => [] 
    'A' => [
        'name' => 'Gill',
        'score' => 90   
    ],
    'B' => [
        'name' => 'Hill',
        'score' => 80
    ]
];

,想要的输出是:

$output = [
'0' => [
    '0' => 'Allen',
    '1' => 90,
    '2' => 'Cate',
    '3' => 100
    '4' => 'Gill'
    '5' => 90
],
'1' => [
    '0' => 'Bill',
    '1' => 80,
    '2' => 'Dave',
    '3' => 70,
    '4' => 'Hill',
    '5' => 70
]
];

我该怎么做?而当班数不一样怎么办?

我尝试了array_columnarray_values,但没有得到正确的输出。

【问题讨论】:

  • 一个循环可能会有所帮助..你有没有尝试过?
  • @SougataBose 这只是我实际项目中的类似情况,实际情况要复杂得多,我只是在这里寻求更有效的方法

标签: php arrays algorithm


【解决方案1】:

使用array_column() 按键创建多维数组的列,并使用foreach 循环每个数组,并在单个数组中分配名称和分数,并将两个数组插入一个新数组;

$arr1 = array_column($input, 'A');
$arr2 = array_column($input, 'B');

foreach($arr1 as $arrn){
$arrnew1[]=$arrn['name'];
$arrnew1[]=$arrn['score'];
};

foreach($arr2 as $arrn){
$arrnew2[]=$arrn['name'];
$arrnew2[]=$arrn['score'];
};

$array = [$arrnew1, $arrnew2];

var_dump($array);

【讨论】:

    【解决方案2】:

    你可以试试这个——

    // Keys to extract
    $keys = array('A', 'B');
    
    $new = array();
    // Loop through the keys
    foreach($keys as $i => $key) {
       $temp = array();
       // Set the values from extracted array 
       array_map(function($v) use(&$temp ) {
           $temp[] = $v['name'];
           $temp[] = $v['score'];       
       }, array_column($input, $key));
       $new[$i] = $temp;
    }
    

    输出

    array(2) {
      [0]=>
      array(6) {
        [0]=>
        string(5) "Allen"
        [1]=>
        int(90)
        [2]=>
        string(4) "Cate"
        [3]=>
        int(90)
        [4]=>
        string(4) "Gill"
        [5]=>
        int(90)
      }
      [1]=>
      array(6) {
        [0]=>
        string(4) "Bill"
        [1]=>
        int(80)
        [2]=>
        string(4) "Dave"
        [3]=>
        int(80)
        [4]=>
        string(4) "Hill"
        [5]=>
        int(80)
      }
    }
    

    Demo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-12
      • 1970-01-01
      • 2015-02-27
      • 1970-01-01
      • 2020-07-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多