Я хочу объединить 2 таблицы. Я показываю вам пример: foreach ($ dashboardData as $ item) {$ results [$ item ['month']] = [DashboardConsts :: COLUMN_MONTHLY => $ item ['month'] ?? ноль, ...

1
Imrickjames 15 Янв 2021 в 19:45

2 ответа

Лучший ответ

Есть много способов добиться этого, все решения должны проходить через массивы, так или иначе.

Вы легко выполните марафон циклов foreach () и множество операторов if (), чтобы убедиться, что преобразование выполнено правильно.

В любом случае, это мой взгляд на вопрос.

Удалите значения null и замените их на {{X1 }}:

<?php

function array_remove_null($input) { 
  foreach ($input as &$value) { 
    if (is_array($value)) { 
      $value = array_remove_null($value); 
    }
  }
  return array_filter($input, function($item){
    return $item !== null && $item !== '';
  }); 
}

/**
 * Using https://www.php.net/manual/en/function.array-replace-recursive.php
 */

$array1 = [
    "2020-12" => [
        "Mois" => "2020-12",
        "Nbr vendus" => null,
        "CA TTC" => null,
        "number" => "1",
    ],
    "2021-01" => [
        "Mois" => "2021-01",
        "Nbr vendus" => null,
        "CA TTC" => null,
        "number" => "2",
    ],
];

$array2 = [
    "2020-12" => [
        "Mois" => "2020-12",
        "Nbr vendus" => "1",
        "CA TTC" => "790",
        "number" => null,
    ],
    "2021-01" => [
        "Mois" => "2021-01",
        "Nbr vendus" => "3",
        "CA TTC" => "1680",
        "number" => null,
    ],
];

$array = array_replace_recursive(array_remove_null($array1), array_remove_null($array2));

var_dump($array);

В действии: https://3v4l.org/WJnYu

1
Anuga 15 Янв 2021 в 17:51

Я думаю, что понял. Вам нужен вложенный цикл для доступа к обоим наборам данных. Следующий ответ может быть не совсем точным, но он близок.

$results = array();
foreach ($inputArrayOne as $onekey => $arrayOne) {
    $temp_results = array();
    foreach ($inputArrayTwo as $twokey => $arrayTwo) {
        if ($onekey != $twokey) {
            continue;
        }
        if (!is_null($arrayOne['month'])) {
            $temp_results['Mois'] = $arrayOne['month'];
        } else if (!is_null($arrayTwo['month'])) {
            $temp_results['Mois'] = $arrayTwo['month'];
        } else {
            $temp_results['Mois'] = null;   // to account for bad data
        }
        if (!is_null($arrayOne['nbr'])) {
            $temp_results['Nbr vendus'] = $arrayOne['nbr'];
        } else if (!is_null($arrayTwo['nbr'])) {
            $temp_results['Nbr vendus'] = $arrayTwo['nbr'];
        } else {
            $temp_results['Nbr vendus'] = null; // to account for bad data
        }
        if (!is_null($arrayOne['sum'])) {
            $temp_results['CA TTC'] = $arrayOne['sum'];
        } else if (!is_null($arrayTwo['sum'])) {
            $temp_results['CA TTC'] = $arrayTwo['sum'];
        } else {
            $temp_results['CA TTC'] = null; // to account for bad data
        }
        if (!is_null($arrayOne['countNewBc'])) {
            $temp_results['number'] = $arrayOne['countNewBc'];
        } else if (!is_null($arrayTwo['countNewBc'])) {
            $temp_results['number'] = $arrayTwo['countNewBc'];
        } else {
            $temp_results['number'] = null; // to account for bad data
        }
    }
    $results[$arrayOne['month']] = $temp_results;
}
1
Millar248 15 Янв 2021 в 17:36
65740118