У меня есть массив с 4 данными каждый, я хочу удалить значение duplicate / equal tag_id и поместить / добавить tag_images вместе с тем же tag_id. Я также использовал array_unique, но не знаю, куда его поставить.

В моем массиве есть tag_id, tag_slug, tag_color и tag_images (массив). Последние 2 массива имеют те же данные, за исключением tag_images, я хочу объединить эти данные как один и поместить tag_images в массив. пример:

array(4) {
  [0]=>
  array(4) {
    ["tag_id"]=> int(25)
    ["tag_slug"]=> string(5) "green"
    ["tag_color"]=> string(7) "#81d742"
    ["tag_images"]=> array(1) {
      [0]=> string(75) "http://localhost/mysite/wp-content/uploads/2018/08/long-sleeve-tee.jpg"
    }
  }
  [1]=>
  array(4) {
    ["tag_id"]=> int(23)
    ["tag_slug"]=> string(3) "red"
    ["tag_color"]=> string(7) "#dd3333"
    ["tag_images"]=> array(1) {
      [0]=> string(69) "http://localhost/mysite/wp-content/uploads/2018/08/vneck-tee.jpg"
    }
  }
  [2]=>
  array(4) {
    ["tag_id"]=> int(23)
    ["tag_slug"]=> string(3) "red"
    ["tag_color"]=> string(7) "#dd3333"
    ["tag_images"]=> array(1) {
      [0]=> string(66) "http://localhost/mysite/wp-content/uploads/2018/08/beanie.jpg"
    }
  }
}

Выход:

array(4) {
  [0]=>
  array(4) {
    ["tag_id"]=>
    int(25)
    ["tag_slug"]=>
    string(5) "green"
    ["tag_color"]=>
    string(7) "#81d742"
    ["tag_images"]=>
    array(1) {
      [0]=>
      string(75) "http://localhost/mysite/wp-content/uploads/2018/08/long-sleeve-tee.jpg"
    }
  }
  [1]=>
  array(4) {
    ["tag_id"]=>
    int(23)
    ["tag_slug"]=>
    string(3) "red"
    ["tag_color"]=>
    string(7) "#dd3333"
    ["tag_images"]=>
    array(1) {
      [0]=>
      string(66) "http://localhost/mysite/wp-content/uploads/2018/08/beanie.jpg"
      [1]=>
      string(69) "http://localhost/mysite/wp-content/uploads/2018/08/vneck-tee.jpg"
    }
  }
}
php
-2
nikko 14 Сен 2018 в 16:15

2 ответа

Лучший ответ

Я бы перебрал основной массив и построил второй.

$mainArray = array
(
    array("tag_id"      => 25,
        "tag_slug"      => "green",
        "tag_color"     => "#81d742",
        "tag_images"    => array("http://localhost/mysite/wp-content/uploads/2018/08/long-sleeve-tee.jpg")
    ),
    array("tag_id"      => 23,
        "tag_slug"      => "red",
        "tag_color"     => "#dd3333",
        "tag_images"    => array("http://localhost/mysite/wp-content/uploads/2018/08/vneck-tee.jpg")
    ),
    array("tag_id"      => 23,
        "tag_slug"      => "red",
        "tag_color"     => "#dd3333",
        "tag_images"    => array("http://localhost/mysite/wp-content/uploads/2018/08/beanie.jpg")
    )
);

$freshArray = array();
foreach ($mainArray as $value)
{
    $key = array_search($value['tag_id'], array_column($freshArray, 'tag_id'));
    if (false === $key)
        $freshArray[] = $value;
    else
        $freshArray[$key]['tag_images'][] = $value['tag_images'][0];
}
var_dump($freshArray);

Выход:

array (size=2)
  0 => 
    array (size=4)
      'tag_id' => int 25
      'tag_slug' => string 'green' (length=5)
      'tag_color' => string '#81d742' (length=7)
      'tag_images' => 
        array (size=1)
          0 => string 'http://localhost/mysite/wp-content/uploads/2018/08/long-sleeve-tee.jpg' (length=70)
  1 => 
    array (size=4)
      'tag_id' => int 23
      'tag_slug' => string 'red' (length=3)
      'tag_color' => string '#dd3333' (length=7)
      'tag_images' => 
        array (size=2)
          0 => string 'http://localhost/mysite/wp-content/uploads/2018/08/vneck-tee.jpg' (length=64)
          1 => string 'http://localhost/mysite/wp-content/uploads/2018/08/beanie.jpg' (length=61)
0
Cid 14 Сен 2018 в 13:55

Вы можете использовать array_merge_recursive ()

Или используйте эту функцию из этого ответа

function my_array_merge(&$array1, &$array2) {
    $result = Array();
    foreach($array1 as $key => &$value) {
        $result[$key] = array_merge($value, $array2[$key]);
    }
    return $result;
}
$array = my_array_merge($array1, array2);
print_r($array);
1
Marat Badykov 14 Сен 2018 в 13:30