唯一的数组不在foreach循环中工作

时间:2016-03-14 07:52:53

标签: php

我试图阻止每次循环时复制的项目数组。我认为独特的数组可以解决我的问题但它似乎没有工作。有替代方案还是我做错了什么?

这是我正在解析的数组。例如,包出现了好几次。我试着让它出现一次。

Array
(
    [0] => bag
    [1] => wallet
    [2] => accessori
    [3] => sunglass
    [4] => clutch
    [5] => tote
)
Array
(
    [0] => handbag
    [1] => faux
    [2] => leather
    [3] => bag
    [4] => clutch
    [5] => hobo
    [6] => purs
    [7] => wallet
    [8] => tote
    [9] => messeng
)
Array
(
    [0] => bag
    [1] => book
)

这是我的代码。

foreach($json as $keywords){

    foreach($keywords as $keyword){

        print_r(array_unique($keyword['keywords']));

    }
}

提前谢谢。

2 个答案:

答案 0 :(得分:0)

您可以先合并所有数组,然后执行array_unique

    $a = array(
        'bag',
        'wallet',
        'accessori',
        'sunglass',
        'clutch',
        'tote'
    );
    $b = array(
        'handbag',
        'faux',
        'leather',
        'bag',
        'clutch',
        'hobo',
        'purs',
        'wallet',
        'tote',
        'messeng',
    );
    $c = array(
        'bag',
        'book',
    );
    $d = array_merge($a, $b, $c);
    var_dump($d);
    $u = array_unique($d);
    var_dump($u);

比较变量$ d和$ u。

答案 1 :(得分:0)

我为multidimensial数组写了array_unique()函数 首先,我已经合并了所有数组,应用了array_unique(),然后重新组合了结果

<?php
$input  = array( array('bag',   'wallet' ),
                    array('wallet', 'purs'  ),
                    array('book',   'purs'  )       
                  );
print_r (arrayUniqueMultidimensial($input));

function arrayUniqueMultidimensial($input) {                
    $merged = array();
    foreach ($input as $subArray) {
        $merged = array_merge($merged, $subArray);
    }

    $filteredArray  = array_unique($merged, SORT_STRING);
    $segment        = array(0); // segmentation
    foreach($input as $subArray) {
        $segment[] = $segment[count($segment)-1] + count($subArray);
    }

    $recomposed = array();
    for($i=1 ; $i<count($segment) ; $i++) {
        $startIndex = $segment[$i-1];
        $endIndex    = $segment[$i] ;
        $temp        = array();
        for ($j=$startIndex ; $j<$endIndex ; $j++) {
            if (array_key_exists($j, $filteredArray)) {
                $temp[] = $filteredArray[$j];
            }
        }
        $recomposed[] = $temp;
    }
    return ($recomposed);
}