@Senseich

Как из массива у которого элементы через точку с запятой сделать другой массив? Подробнее в описании?

В общем есть такой массив:
Array
(
    [0] => 1;Изделие из золота №001;1325;1235;15

    [1] => 2;Изделие из золота №002;1425;1425;15

    [2] => 3;Изделие из золота №003;1300;1100;0
 
    и т.д.


Как видите, в каждом ключивике значения разделены запятой, нужно сделать такой массив:

$arItems = array(
    array(
        "ID" => 1,
        "NAME" => "Изделие из золота №001",
        "PRICE" => 1325,
        "DISCOUNT_PRICE" => 1235,
        "AMOUNT" => 15,
    ),
    array(
        "ID" => 2,
        "NAME" => "Изделие из золота №002",
        "PRICE" => 1425,
        "DISCOUNT_PRICE" => 1425,
        "AMOUNT" => 15,
    ),
    array(
        "ID" => 3,
        "NAME" => "Изделие из золота №003",
        "PRICE" => 1300,
        "DISCOUNT_PRICE" => 1100,
        "AMOUNT" => 0,
    ),
    array(
        "ID" => 4,
        "NAME" => "Изделие из золота №004",
        "PRICE" => 1750,
        "DISCOUNT_PRICE" => 1750,
        "AMOUNT" => 15,
    ),
И т.д. .......
  • Вопрос задан
  • 368 просмотров
Пригласить эксперта
Ответы на вопрос 3
$arr = array(
    [0] => 1;Изделие из золота №001;1325;1235;15

    [1] => 2;Изделие из золота №002;1425;1425;15

    [2] => 3;Изделие из золота №003;1300;1100;0
);
$newarr = [];
foreach ($arr as $item) {
$item = explode(';' , $item)
$arritem = [];
list ($arritem['ID'] , $arritem['NAME'] , $arritem['PRICE'] , $arritem['DISCOUNT_PRICE'] , $arritem['AMOUNT']) = $item;
$newarr[] = $arritem;
}
Ответ написан
Комментировать
AlexMaxTM
@AlexMaxTM
$arr = array(
    0 => "1;Изделие из золота №001;1325;1235;15",
    1 => "2;Изделие из золота №002;1425;1425;15",
    2 => "3;Изделие из золота №003;1300;1100;0",

);
$arItems = array();
foreach ($arr as $item) {
    list(
        $keys['ID'],
        $keys['NAME'],
        $keys['PRICE'],
        $keys['DISCOUNT_PRICE'],
        $keys['AMOUNT']
        ) = explode(";", $item);
    $arItems[] = $keys;
}
var_export($arItems);
Ответ написан
@eustatos
Если обработка нужна несколько раз. С константой только не очень получилось
$data = Array(
    '1;Изделие из золота №001;1325;1235;15',
    '2;Изделие из золота №002;1425;1425;15',
    '3;Изделие из золота №003;1300;1100;0',
);
function transformData($data)
{
    //определяем константу в виде массива с названиями для элементов массива
    define('columnName', Array(
        'ID',
        'NAME',
        'PRICE',
        'DISCOUNT_PRICE',
        'AMOUNT'
    ));
    // обходим каждый элемент массива и выполняем с ним функцию - первый параметр
    $res = array_map(
        function($columnValue)  {
            // назначаем значения ключей элеметов массива = значения первого массива,
            // значения = значения элементов второго массива
            return array_combine(
                columnName,
                explode(';', $columnValue) // превращаем строку в массив. ";" - делитель
            );
        },
        $data
    );
    return $res;
}
// где-то в коде вызываем функцию 
print_r(transformData($data));
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы