如果重复,则更改数组值

时间:2017-03-22 09:53:52

标签: php arrays

我有一个数组,其中包含一些网站的文章。问题是:当同一篇文章分为两个不同的类别时,它只显示1.在这个例子中,类别是“服务”和“销售”。

如果文章重复且类别为“销售”,我希望其中一个更改为“服务”,反之亦然。

我现在获得的数组(3& 4重复,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
    )

)

我想要完成的数组(不再重复,值已更改):

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
    )

)

我尝试了什么:

$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';
                    }
                }

            }

        }
    }

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:3)

将您的数据放入$array变量并尝试:

$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 :(得分:1)

如果订单对您不重要,您可以使用array_multisortarray_columnarray_walk

$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);

这是working demo

答案 2 :(得分:0)

这里我写了一些代码,你可以尝试一下。

<?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);