Multidimentional数组获取相同日期的逗号分隔值

时间:2018-01-20 07:11:31

标签: php multidimensional-array

需要你的帮助来解决问题

我尝试使用以下链接解决方案,但没有运气

Implode or join multidimentional array with comma

PHP数组

Array
(
    [missedFridgeLog] => Array
        (
            [0] => Array
                (
                    [date] => 01/01/18
                    [name] => Medicine
                )

            [1] => Array
                (
                    [date] => 01/01/18
                    [name] => Drugs
                )

            [2] => Array
                (
                    [date] => 02/01/18
                    [name] => Medicine
                )

            [3] => Array
                (
                    [date] => 02/01/18
                    [name] => Drugs
                )

        )

)

想要合并相同日期的价值

所需的输出

Array
    (
        [missedFridgeLog] => Array
            (
                [0] => Array
                    (
                        [date] => 01/01/18
                        [name] => Medicine, Drugs
                    )

                [1] => Array
                    (
                        [date] => 02/01/18
                        [name] => Medicine, Drugs
                    )

            )

    )

提前致谢。

4 个答案:

答案 0 :(得分:1)

$missedFridgeLog = [
    [
        "date" => "01/01/18",
        "name" => "Medicine"
    ],[
        "date" => "01/01/18",
        "name" => "Drugs"
    ]
    [
        "date" => "02/01/18",
        "name" => "Medicine"
    ],
    [
        "date" => "02/01/18",
        "name" => "Drugs"
    ]
];


$byDates = [];
foreach ($missedFridgeLog as $mfg) {
    $byDates[$mfg['date']][] = $mfg['name'];
}

$res = [];
foreach ($byDates as $date => $name) {
    $res[] = [
        'name' => join(',',$name),
        'date' => $date
    ];
}
var_dump($res);

答案 1 :(得分:0)

每次进行插入或更新结果数组时,都需要搜索key, value对。使用this function()搜索associate array。如果匹配则updateadditional name info匹配,则new insert为结果数组。

 function filter_array($array){    

///$array  your previous array data    
$result = array();

foreach($array["missedFridgeLog"] as $m){
    $flag = true;
    foreach($result as $k=>$r) {
        if (is_in_array($r, "date", $m["date"]) == "yes") {
            $result[$k]["name"] = $r["name"] . ',' . $m["name"];
            $flag = false;
            break;
        }
    }
    if($flag==true){
        $result[] = $m;
    }
}

return array("missedFridgeLog"=>$result);
}


function is_in_array($array, $key, $key_value){
$within_array = 'no';
foreach( $array as $k=>$v ){
    if( is_array($v) ){
        $within_array = is_in_array($v, $key, $key_value);
        if( $within_array == 'yes' ){
            break;
        }
    } else {
        if( $v == $key_value && $k == $key ){
            $within_array = 'yes';
            break;
        }
    }
}
return $within_array;
}

答案 2 :(得分:0)

可能这不是最好的方法,但它会有所帮助

$arr['missedFridgeLog'] = [
        [
        'date' => '01/01/18',
        'name' => 'Medicine1'
    ],
        [
        'date' => '02/01/18',
        'name' => 'New Medicine2'
    ],
        [
        'date' => '01/01/18',
        'name' => 'Drugs1'
    ],
        [
        'date' => '02/01/18',
        'name' => 'Medicine2'
    ],
        [
        'date' => '01/01/18',
        'name' => 'New Drugs1'
    ],
        [
        'date' => '02/01/18',
        'name' => 'Drugs2'
    ]
];

echo "<pre>";

$new_arr = array();
$date = array();

foreach ($arr['missedFridgeLog'] as $k => $a) {
    if (in_array($a['date'], $date))
        continue;
    $new_arr[$k]['name'] = $a['name'];
    $new_arr[$k]['date'] = "";
    foreach ($arr[missedFridgeLog] as $key => $val) {
        if ($key != $k) {
            if ($a['date'] == $val['date']) {
                $date[] = $new_arr[$k]['date'] = $a['date'];
                $new_arr[$k]['name'] .= ", " . $val['name'];
            }
        }
    }
    if (empty($new_arr[$k]['date']))
        unset($new_arr[$k]);
}

print_r($new_arr);

答案 3 :(得分:0)

您可以尝试以下方法: -

输入数组: -

loopback device
$chkArray = [
  'missedFridgeLog' => [
    '0' => [
      'date' => '01/01/18',
      'name' => 'Medicine'
    ],
    '1' => [
      'date' => '01/01/18',
      'name' => 'Drugs'
    ],
    '2' => [
      'date' => '02/01/18',
      'name' => 'Medicine'
    ],
    '3' => [
      'date' => '02/01/18',
      'name' => 'Drugs'
    ],
    '4' => [
      'date' => '02/01/18',
      'name' => 'My Drugs'
    ]
  ]

];

OutPut: -

$i = 0;
$finalarray = array();
foreach($chkArray['missedFridgeLog'] as $key=>$value) {
  $checkExist = array_search($value['date'], array_column($finalarray, 'date'), true);
  if($checkExist !== false) {
     $finalarray[$checkExist]['name'] = $finalarray[$checkExist]['name'].','.$value['name'];
  }
  else {
  $finalarray[$i]['date'] = $value['date'];
  $finalarray[$i]['name'] = $value['name'];
  $i++;
  }

}

print_r($finalarray);