Помогите поправить массив php

155
15 декабря 2018, 09:00

Я новичок в php... Но пытаюсь полученные данные привести к определенному виду массива..Мой скрипт извлекает данные из XML и записывает их массив в CSV файл в виде:

    Array
(
    [Code] => 209113
    [URL] => https://source.dclink.com.ua/images/490432-1.jpg
)
Array
(
    [Code] => 209125
    [URL] => https://source.dclink.com.ua/images/489002-new.jpg
)
Array
(
    [Code] => 205366
    [URL] => https://source.dclink.com.ua/images/477802-new.jpg
)
Array
(
    [Code] => 205366
    [URL] => https://source.dclink.com.ua/images/477803-new.jpg
)
Array
(
    [Code] => 209116
    [URL] => https://source.dclink.com.ua/images/493445-new.jpg
)

с помощью вот такого скрипта

   $start = microtime(true);
   $fpfinal = fopen(__DIR__.'/PicURlbyCode.csv','w+');
   $headers = array ('Code','link');
   fputcsv($fpfinal,$headers,';','"');

  foreach(glob(__DIR__."/PicList/*.xml") as $FileName){                                           
  $items = array();
 $xml = simplexml_load_file($FileName);
 foreach($xml->Product as $product){
     $items= get_object_vars($product);
     fputcsv($fpfinal,$items,';','"');
 } 
  } fclose($fpfinal);    
  echo (memory_get_usage(true));
  echo 'Время выполнения скрипта: '.round(microtime(true) - $start, 4).' сек.';

как видите CODE повторяется а ссылки URL разные, Помогите привести массив $items к виду

    Array
(
    [Code] => 205366
    [URL] => https://source.dclink.com.ua/images/477802-new.jpg
    [URL2] => https://source.dclink.com.ua/images/477803-new.jpg
)

как бы один код и к нему несколько ссылок...а не 1 и тот же код одна ссылка... и ЗАПИСАТЬ ВСЕ в CSV файл

Answer 1

Изначально имеем следующий многомерный массив:

$array = [
    ['Code' => '209113', 'URL' => 'https://source.dclink.com.ua/images/490432-1.jpg'],
    ['Code' => '209125', 'URL' => 'https://source.dclink.com.ua/images/489002-new.jpg'],
    ['Code' => '205366', 'URL' => 'https://source.dclink.com.ua/images/477802-new.jpg'],
    ['Code' => '205366', 'URL' => 'https://source.dclink.com.ua/images/477803-new.jpg'],
    ['Code' => '209116', 'URL' => 'https://source.dclink.com.ua/images/493445-new.jpg']
];

Первый способ, он прекрасно работает, но я считаю, что он слишком запутан:

foreach ($array as $key => $value)
{
    $new[$value['Code']][] = $value['URL'];
}
foreach ($new as $key => $value)
{
    $new[$key] = [];
    foreach ($value as $k => $v)
    {
        $new[$key]['URL'.(($k + 1) > 1 ? $k + 1 : false)] = $value[$k];
    }
}
$i = 0;
foreach ($new as $key => $value)
{
    $data[$i]['Code'] = $key;
    foreach ($value as $k => $v)
    {
        $data[$i][$k] = $v;
    }
    $i++;
}
print_r($data);

Второй способ, более упрощенный и оптимальный вариант, как по мне:

$result = [];
foreach ($array as $row)
{
    if (!isset($result[$row['Code']]))
    {
        $result[ $row['Code'] ] = [
            'Code' => $row['Code'],
            'URL' => $row['URL']
        ];
    }
    else
    {
        $result[$row['Code']]['URL'.count($result[$row['Code']])] = $row['URL'];
    }
}
$result = array_values($result);
print_r($result);
READ ALSO
php не загружает большие файлы

php не загружает большие файлы

Мне необходимо загружать файлы с размером ~2гбНа данный момент чтобы я не делал, больше 100мб загрузить не могу

159
загрузка фото пользователя laravel

загрузка фото пользователя laravel

как обработать загрузку фото профиля пользователя

161
Отправка аттача с формы Tilda на почту

Отправка аттача с формы Tilda на почту

Есть форма на тильде, ссылка на форму, к ней надо подсоединить свой скрипт phpСкрипт пишу при помощи phpmail(желание заказчика)

319