2017-03-22 4 views
3

Ich habe ein Array, das einige Artikel einer Website enthält. Das Problem ist: wenn der gleiche Artikel in 2 verschiedenen Kategorien ist, wird nur 1 angezeigt. In diesem Beispiel sind die Kategorien "Service" und "Sales".Ändern Sie einen Array-Wert, wenn duplizieren

Wenn der Artikel doppelt vorhanden ist und die Kategorie "Sales" lautet, möchte ich 1 von ihnen in "Service" ändern und umgekehrt.

Das Array ich jetzt habe (3 & 4 als Duplikate und 7 & 8):

Array 
(
    [0] => Array 
     (
      [0] => Sales 
      [1] => assistentiesystemen 
      [2] => www.youtube.com/video/38BbjLmVJXk 
      [3] => Park assist 
     ) 


[1] => Array 
    (
     [0] => Sales 
     [1] => assistentiesystemen 
     [2] => www.youtube.com/video/3lGfTZdVK1s 
     [3] => Multi Collision braking system 
    ) 

[2] => Array 
    (
     [0] => Sales 
     [1] => assistentiesystemen 
     [2] => www.youtube.com/video/6mgDraWpGvE 
     [3] => Area view 
    ) 

[3] => Array 
    (
     [0] => Sales 
     [1] => assistentiesystemen 
     [2] => www.youtube.com/video/II68oVm4zro 
     [3] => Lane Assist 
    ) 

[4] => Array 
    (
     [0] => Sales 
     [1] => assistentiesystemen 
     [2] => www.youtube.com/video/II68oVm4zro 
     [3] => Lane Assist 
    ) 

[5] => Array 
    (
     [0] => Sales 
     [1] => assistentiesystemen 
     [2] => www.youtube.com/video/N0fa4dUBkvE 
     [3] => Trailer assist 
    ) 

[6] => Array 
    (
     [0] => Service 
     [1] => veilig-op-de-weg 
     [2] => www.youtube.com/video/NCNDyW6Yr1g 
     [3] => Ruitenwissers 
    ) 

[7] => Array 
    (
     [0] => Service 
     [1] => veilig-op-de-weg 
     [2] => www.youtube.com/video/PJEC-yqUwzE 
     [3] => Bandenafdichtset 
    ) 

[8] => Array 
    (
     [0] => Service 
     [1] => veilig-op-de-weg 
     [2] => www.youtube.com/video/PJEC-yqUwzE 
     [3] => Bandenafdichtset 
    ) 

) 

Das Array I (keine Duplikate mehr und die Werte geändert) erreichen möchten:

Array 
(
    [0] => Array 
     (
      [0] => Sales 
      [1] => assistentiesystemen 
      [2] => www.youtube.com/video/38BbjLmVJXk 
      [3] => Park assist 
     ) 


[1] => Array 
    (
     [0] => Sales 
     [1] => assistentiesystemen 
     [2] => www.youtube.com/video/3lGfTZdVK1s 
     [3] => Multi Collision braking system 
    ) 

[2] => Array 
    (
     [0] => Sales 
     [1] => assistentiesystemen 
     [2] => www.youtube.com/video/6mgDraWpGvE 
     [3] => Area view 
    ) 

[3] => Array 
    (
     [0] => Service 
     [1] => assistentiesystemen 
     [2] => www.youtube.com/video/II68oVm4zro 
     [3] => Lane Assist 
    ) 

[4] => Array 
    (
     [0] => Sales 
     [1] => assistentiesystemen 
     [2] => www.youtube.com/video/II68oVm4zro 
     [3] => Lane Assist 
    ) 

[5] => Array 
    (
     [0] => Sales 
     [1] => assistentiesystemen 
     [2] => www.youtube.com/video/N0fa4dUBkvE 
     [3] => Trailer assist 
    ) 

[6] => Array 
    (
     [0] => Service 
     [1] => veilig-op-de-weg 
     [2] => www.youtube.com/video/NCNDyW6Yr1g 
     [3] => Ruitenwissers 
    ) 

[7] => Array 
    (
     [0] => Sales 
     [1] => veilig-op-de-weg 
     [2] => www.youtube.com/video/PJEC-yqUwzE 
     [3] => Bandenafdichtset 
    ) 

[8] => Array 
    (
     [0] => Service 
     [1] => veilig-op-de-weg 
     [2] => www.youtube.com/video/PJEC-yqUwzE 
     [3] => Bandenafdichtset 
    ) 

) 

Was ich versucht habe:

$length = count ($sorted); 

    for ($c = 0; $c < $length; $c++) { 
     $check_array = $sorted[$c]; 

     for ($x = 0; $x < $length; $x++) { 
      $compare_array = $sorted[$x]; 

      if ($x != $i){ 

       if($check_array[2] == $compare_array[2] && $check_array[0] == $compare_array[0]){ 
        //print_r ($check_array); 
        //print_r ($compare_array); 
        if($check_array[0] == 'Sales'){ 
         $compare_array[0] = 'Service'; 
        } 
        if($check_array[0] == 'Service'){ 
         $compare_array[0] = 'Sales'; 
        } 
       } 

      } 

     } 
    } 

Jede Hilfe wird viel App sein revanchiert.

+0

Was sind die wenigen Dinge ?? Können Sie zeigen, was Sie getan haben? –

+0

Mein Code hinzugefügt, der nicht funktioniert –

+0

Sie versuchen, die Verkäufe zu Service und Service zu Umsatz zu ändern –

Antwort

3

Setzen Sie Ihre Daten in $array Variable und versuchen Sie es:

$hash = array_map(function ($value) { return md5(implode($value)); } , $array); 

$keys = array_keys(array_diff_assoc($hash, array_unique($hash))); 

foreach($keys as $key) 
    $array[ $key ][0] = $array[ $key ][0] == 'Service' ? 'Sales' : 'Service'; 
+1

netter Ansatz. aber ich denke, Sie können einfach '$ hash = array_map ('serialize', $ array);' für "Hashing" verwenden. – sevavietl

+0

Nur die Verkaufsduplikate werden richtig behandelt, die Dienstduplikate scheinen nicht zu funktionieren. Irgendwelche Ideen? –

+0

7 & 8 ist Dienstduplikate. es ist richtig! Bestellung ist wichtig für dich? – MahdiY

0

Hier habe ich einen Code geschrieben, den Sie ausprobieren können.

<?php  
$array = [ 
    [ 
     0 => 'Sales', 
     1 => 'assistentiesystemen', 
     2 => 'www.youtube.com/video/38BbjLmVJXk', 
     3 => 'Park assist', 
    ], 
    [ 
     0 => 'Sales', 
     1 => 'assistentiesystemen', 
     2 => 'www.youtube.com/video/3lGfTZdVK1s', 
     3 => 'Multi Collision braking system' 
    ], 
    [ 
     0 => 'Sales', 
     1 => 'assistentiesystemen', 
     2 => 'www.youtube.com/video/6mgDraWpGvE', 
     3 => 'Area view' 
    ], 
    [ 
     0 => 'Sales', 
     1 => 'assistentiesystemen', 
     2 => 'www.youtube.com/video/II68oVm4zro', 
     3 => 'Lane Assist' 
    ], 
    [ 
     0 => 'Sales', 
     1 => 'assistentiesystemen', 
     2 => 'www.youtube.com/video/II68oVm4zro', 
     3 => 'Lane Assist' 
    ], 
    [ 
     0 => 'Sales', 
     1 => 'assistentiesystemen', 
     2 => 'www.youtube.com/video/N0fa4dUBkvE', 
     3 => 'Trailer assist' 
    ], 
    [ 
     0 => 'Service', 
     1 => 'veilig-op-de-weg', 
     2 => 'www.youtube.com/video/NCNDyW6Yr1g', 
     3 => 'Ruitenwissers' 
    ], 
    [ 
     0 => 'Service', 
     1 => 'veilig-op-de-weg', 
     2 => 'www.youtube.com/video/PJEC-yqUwzE', 
     3 => 'Bandenafdichtset' 
    ], 
    [ 
     0 => 'Service', 
     1 => 'veilig-op-de-weg', 
     2 => 'www.youtube.com/video/PJEC-yqUwzE', 
     3 => 'Bandenafdichtset' 
    ] 
]; 

/** 
* @param $firstIndexValue 
* @param $thirdIndexValue 
* @param $searchArray 
* @return bool 
*/ 
function isExistValue($firstIndexValue, $thirdIndexValue, $searchArray) 
{ 
    foreach ($searchArray as $element) { 
     if ($firstIndexValue == $element[0] && $thirdIndexValue == $element[3]) { 
      return true; 
     } 
    } 

    return false; 
} 


$newArray = []; 
foreach ($array as $arr) { 
    $isExist = isExistValue($arr[0], $arr[3], $newArray); 
    if ($isExist) { 
     if ($arr[0] == 'Sales') { 
      $arr[0] = 'Service'; 
     } elseif ($arr[0] == 'Service') { 
      $arr[0] = 'Sales'; 
     } 
    } 
    $newArray[] = $arr; 
} 

var_dump($newArray); 
+0

Funktioniert, danke !! –

+0

Sie sind herzlich eingeladen ... @ RemcoA –

1

Wenn der Auftrag für Sie nicht wichtig ist, können Sie array_multisort, array_column und array_walk verwenden:

$replacements = [ 
    'Sales' => 'Service', 
    'Service' => 'Sales' 
]; 

// Sort array by youtube url. 
array_multisort($array, array_column($array, 2)); 

array_walk($array, function (&$curr, $_, &$prev) use ($replacements) { 
    if (
     $prev !== null 
     && $prev[2] === $curr[2] 
    ) { 
     $curr[0] = $replacements[$curr[0]]; 
    } 

    $prev = $curr; 
}, null); 

Hier ist working demo.

+0

Funktioniert, danke! Ich denke, MahdiYs Antwort ist die beste Lösung für mich. –

Verwandte Themen