2016-12-29 3 views
0

У меня есть один массив и попробуйте изменить некоторый ключ и значение, например, если sku такие же, как мне нужно объединить изображение. Ниже массива У меня естьСлияние массива PHP на основе ключа и значения

Array 
    (
     [0] => Array 
      (
       [sku] => h-eldora 
       [name] => H ELDORA 
       [image] => s/files/1/1282/4221/products/h_eldora_01.jpg?v=1476667054 
      ) 

     [1] => Array 
      (
       [sku] => h-eldora 
       [name] => 
       [image] => s/files/1/1282/4221/products/h_eldora_02.jpg?v=1475116221 
      ) 

     [2] => Array 
      (
       [sku] => h-eldora 
       [name] => 
       [image] => s/files/1/1282/4221/products/20100707164858197_1_88da6866-701a-42b9-b523-5e454cbcce70.jpg?v=1475717598 
      ) 

     [3] => Array 
      (
       [sku] => hl-dracy 
       [name] => HL DRACY 
       [image] => s/files/1/1282/4221/products/h_dracy_01.jpg?v=1475115222 
      ) 

     [4] => Array 
      (
       [sku] => hl-dracy 
       [name] => 
       [image] => s/files/1/1282/4221/products/h_dracy_02.jpg?v=1475115223 
      ) 

     [5] => Array 
      (
       [sku] => hl-dracy 
       [name] => 
       [image] =>s/files/1/1282/4221/products/20100707164858197_1_633237aa-36ec-441b-a074-03844f6a0858.jpg?v=1475719793 
      ) 
) 

Мне нужно объединить массив как этот

Array 
(


    [0] => Array 
     (
      [sku] => h-eldora 
      [name] => 
      [image1] => s/files/1/1282/4221/products/h_eldora_02.jpg?v=1475116221 
      [image2] => s/files/1/1282/4221/products/20100707164858197_1_88da6866-701a-42b9-b523-5e454cbcce70.jpg?v=1475717598 
      [image3] => s/files/1/1282/4221/products/20100707164858197_1_88da6866-701a-42b9-b523-5e454cbcce70.jpg?v=1475717598 
     ) 
      [1] => Array 
     (
      [sku] => hl-dracy 
      [name] => HL DRACY 
      [image1] => s/files/1/1282/4221/products/h_dracy_01.jpg?v=1475115222 
      [image2] => s/files/1/1282/4221/products/h_dracy_02.jpg?v=1475115223 
      [image3] => s/files/1/1282/4221/products/20100707164858197_1_633237aa-36ec-441b-a074-03844f6a0858.jpg?v=1475719793 
     ) 
) 

Если какая-либо функция PHP есть, чем пожалуйста, дайте мне знать, или любой код предложение

+1

В этом нет встроенного встроенного программного обеспечения: вам необходимо выполнить итерацию, чтобы достичь этого сокращения отображения. – bishop

+0

Да, я пытаюсь сделать это с помощью foreach, но не получаю правильную идею или логику, как я могу ее достичь. если у вас есть подсказка, просто помогите мне @bishop – Jalpesh

+1

oh, good o'l '$ new_array [$ value ['key']]' grouping 'foreach' – Ghost

ответ

1

Использование простой PHP:

<?php 

$arr1 = array(
    0 => array(
     'sku' => 'h-eldora', 
     'name' => 'H ELDORA', 
     'image' => 's/files/1/1282/4221/products/h_eldora_01.jpg?v=1476667054' 
    ), 
    1 => array(
     'sku' => 'h-eldora', 
     'name' => '', 
     'image' => 's/files/1/1282/4221/products/h_eldora_02.jpg?v=1475116221' 
    ), 
    2 => array(
     'sku' => 'h-eldora', 
     'name' => '', 
     'image' => 's/files/1/1282/4221/products/20100707164858197_1_88da6866-701a-42b9-b523-5e454cbcce70.jpg?v=1475717598' 
    ), 
    3 => array(
     'sku' => 'hl-dracy', 
     'name' => 'HL DRACY', 
     'image' => 's/files/1/1282/4221/products/h_dracy_01.jpg?v=1475115222' 
    ), 
    4 => array(
     'sku' => 'hl-dracy', 
     'name' => 'H ELDORA', 
     'image' => 's/files/1/1282/4221/products/h_dracy_02.jpg?v=1475115223' 
    ), 
    5 => array(
     'sku' => 'hl-dracy', 
     'name' => 'H ELDORA', 
     'image' => 's/files/1/1282/4221/products/20100707164858197_1_633237aa-36ec-441b-a074-03844f6a0858.jpg?v=1475719793' 
    ) 
); 

$newArr = $imgIndex = array(); 
foreach($arr1 as $a){ 
    if(!array_key_exists($a['sku'],$newArr)){ 
     $newArr[$a['sku']] = array(
      'sku' => $a['sku'], 
      'name' => $a['name'], 
      'image1' => $a['image'] 
     ); 
     $imgFound[$a['sku']] = 1; 
    }else{ 
     $imgFound[$a['sku']]++; 
     $newArr[$a['sku']]['image'.$imgFound[$a['sku']]] = $a['image']; 
    } 
} 

unset($imgFound); 
echo '<pre>'; print_r($newArr); echo '</pre>'; 

?> 
+1

Его работа для меня. Спасибо – Jalpesh

1

Это может работать на вас:

$data = // your input array 

$uniqueSKUs = Array(); 
$newArray = Array(); 
$currentIndex = -1; 

foreach ($data as $item) { 
    if (!in_array($item['sku'], $uniqueSKUs)) { 
     $currentIndex++; 

     $uniqueSKUs[] = $item['sku']; 

     $newArray[$currentIndex] = Array(
      'sku' => $item['sku'], 
      'name' => $item['name'] 
     ); 
    } 

    $newArray[$currentIndex]['images'][] = $item['image']; 
} 

echo "<pre>"; 
var_dump($newArray); 
echo "</pre>"; 
+0

Спасибо, что он работает, но возвращает значение массива как строку – Jalpesh

Смежные вопросы