Как слить вместе значения в массиве если по одному ключу их значения совпадают?

Добрый день коллеги.

Будьте добры, помогите решить пару вопросов. Есть сайт на modx evo, делаю выгрузку прайс листа, но это не магазин, а компанию предоставляющая услуги. На странице услуги я создал multiTV поле с названием, ценой и ценой по акции.
В прайсе (csv) формат такой: Раздел, Подраздел, Услуга, Цена, Цена по акции. Т.к нет ID документов в которые нужно сливать, делаю проверку по полю раздел и подраздел, столкнулся с парой сложнойстей для меня:
1. Как мне в массиве слить значения Услуга, с одинковым полем Подраздел, сейчас на выходе получаю, такой массив:
Array
(
    [0] => Array
        (
            [tv] => Array
                (
                    [4] => КЛЕТОЧНАЯ КОСМЕТОЛОГИЯ
                    [35] => prp
                    [41] => PRP-терапия (2 пробирки )15 000 ₽
                )

            [] => Array
                (
                    [] => 
                )

            [content] => Array
                (
                    [parent] => 19
                )

        )

    [1] => Array
        (
            [tv] => Array
                (
                    [4] => КЛЕТОЧНАЯ КОСМЕТОЛОГИЯ
                    [35] => prp
                    [41] => PRP-терапия (4пробирки )25 000 ₽
                )

            [] => Array
                (
                    [] => 
                )

            [content] => Array
                (
                    [parent] => 19
                )

        )

)


Получается на выходе мне нужно слить вместе поля tv->41 , если у них значения tv->35 совпадают.
Также при сливе нужно форматировать tv->41 в строку JSON. Что-то вроде:
{

"fieldValue":[
    {
        "name":"PRP-терапия (2 пробирки )",
        "price":"15000",
        "price_action":""
    }
],

"fieldSettings":{"autoincrement":1}

}


М... да забыл уточнить, сейчас при сливе, я поля Услуга, Цена, Цена по акции, сливаю в одно т.к оно будет в формате json.
$name = $output_arr['tv']['1'];
    $price = str_replace('руб.', '₽', $output_arr['tv']['2']);
    $price_acton = $output_arr['tv']['3'];
    $output_arr['tv']['41'] = $name.$price.$price_acton ;
  • Вопрос задан
  • 325 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Ad4ptec
Окончательный вариант:
$result = $tempArr ;
	
	foreach (array_keys($result) as $key1) {
		unset($result[$key1][tv][4]);
		unset($result[$key1][tv][41]);
	}
	
	$output = array_intersect_key($tempArr, array_map("unserialize", array_unique(array_map("serialize", $result))));

	foreach (array_keys($output) as $key2) {
		unset($output[$key2][tv][41]);
		foreach (array_keys($tempArr) as $key3) {
			if ($output[$key2][tv][35] == $tempArr[$key3][tv][35]) {
				$output[$key2][tv][41] .= $tempArr[$key3][tv][41] . "<br/>\n";
			}
		}
	}
	
	print_r($output);
Ответ написан
studev
@studev Автор вопроса
Сейчас массив выглядит так:
$tempArr = array(
    array(
        "tv" => array(
            "4" => "ЭСТЕТИЧЕСКАЯ КОСМЕТОЛОГИЯ",
            "35" => "ПИЛИНГИ skin tech",
            "41" => "Easy  Peel - срединный пилинг  руки (дерматологический пилинг)2 800 ₽"
        ),

    ),
    array(
        "tv" => array(
            "4" => "ЭСТЕТИЧЕСКАЯ КОСМЕТОЛОГИЯ",
            "35" => "ПИЛИНГИ skin tech",
            "41" => "Easy Peel - срединный пилинг лицо и шея (дерматологический пилинг)7 000 ₽"
        ),

    ),
    array(
        "tv" => array(
            "4" => "ЭСТЕТИЧЕСКАЯ КОСМЕТОЛОГИЯ",
            "35" => "ПИЛИНГИ skin tech",
            "41" => "Easy Peel- срединный пилинг  лицо (дерматологический пилинг)4 800 ₽"
        ),
    ),
    array(
        "tv" => array(
            "4" => "ИНЪЕКЦИОННАЯ КОСМЕТОЛОГИЯ",
            "35" => "БИОРЕВИТАЛИЗАЦИЯ",
            "41" => "IAL-SYSTEM 1.1 мл (мезотерапия с использованием препаратов  гиалуроновой кислоты)от 3х процедур12 125 ₽"
        ),
    ),
    array(
        "tv" => array(
            "4" => "ИНЪЕКЦИОННАЯ КОСМЕТОЛОГИЯ",
            "35" => "БИОРЕВИТАЛИЗАЦИЯ",
            "41" => "IAL-SYSTEM 1.1 мл (мезотерапия с использованием препаратов  гиалуроновой кислоты)от 5х процедур11 500 ₽"
        ),
    ),
);


На выходе хотелось бы получить, что-то вроде:

$tempArr = array(
    array(
        "tv" => array(
            "4" => "ЭСТЕТИЧЕСКАЯ КОСМЕТОЛОГИЯ",
            "35" => "ПИЛИНГИ skin tech",
            "41" => "Easy  Peel - срединный пилинг  руки (дерматологический пилинг)2 800, ₽ Easy Peel - срединный пилинг лицо и шея (дерматологический пилинг)7 000 ₽, Easy Peel- срединный пилинг  лицо (дерматологический пилинг)4 800 ₽"
        ),

    ),
    array(
        "tv" => array(
            "4" => "ИНЪЕКЦИОННАЯ КОСМЕТОЛОГИЯ",
            "35" => "БИОРЕВИТАЛИЗАЦИЯ",
            "41" => "IAL-SYSTEM 1.1 мл (мезотерапия с использованием препаратов  гиалуроновой кислоты)от 3х процедур12 125 ₽, IAL-SYSTEM 1.1 мл (мезотерапия с использованием препаратов  гиалуроновой кислоты)от 5х процедур11 500 ₽"
        ),
    ),
);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы