删除第二个数组中未列出的数组键

时间:2016-06-19 13:52:16

标签: php arrays

以下是我的结果数组

Array (
    [0] => Array
        (
            [ProductID] => 220
            [TextID] => 477
            [ProductName] => Hugo Woman
            [Price] => 43.91
            [BTW] => 21
            [Stock] => 500
            [BrandID] => 186
            [ProductImage] => https://media.douglas-shop.com/874229/300_0/Hugo_Boss-Hugo_Woman-EdP_30ml_GRATIS_Nail_Polish_4ml.jpg
            [CategoryID] => 1
            [SubCategoryID] => 1
            [View] => 0
        )

    [1] => Array
        (
            [ProductID] => 616
            [TextID] => 959
            [ProductName] => Hugo  XY
            [Price] => 44.95
            [BTW] => 21
            [Stock] => 500
            [BrandID] => 186
            [ProductImage] => https://media.douglas-shop.com/333660/300_0/Hugo_Boss-Hugo_XY.jpg
            [CategoryID] => 2
            [SubCategoryID] => 2
            [View] => 0
        )

    [2] => Array
        (
            [ProductID] => 650
            [TextID] => 991
            [ProductName] => Hugo Just Different
            [Price] => 45.76
            [BTW] => 21
            [Stock] => 500
            [BrandID] => 186
            [ProductImage] => https://media.douglas-shop.com/617162/300_0/Hugo_Boss-Hugo_Just_Different.jpg
            [CategoryID] => 2
            [SubCategoryID] => 2
            [View] => 0
        )
)

我有第二个带子类别的数组,其中键引用了SubCategoryID:

Array
(
    [1] => Array
        (
            [EN] => Ladies
            [NL] => Dames
        )

    [2] => Array
        (
            [EN] => Men
            [NL] => Heren
        )

)

我想遍历结果数组并删除第二个数组中没有列出SubCategoryID的键。我查看http://php.net/manual/en/function.array-filter.php,但无法找出最佳方法。

谢谢!

2 个答案:

答案 0 :(得分:0)

请尝试我帮助你...

$array = array (
0 => array
    (
        'ProductID' => 220,
        'TextID' => 477,
        'ProductName' => 'Hugo Woman',
        'Price' => 43.91,
        'BTW' => 21,
        'Stock' => 500,
        'BrandID' => 186,
        'ProductImage' => 'https://media.douglas-shop.com/874229/300_0/Hugo_Boss-Hugo_Woman-EdP_30ml_GRATIS_Nail_Polish_4ml.jpg',
        'CategoryID' => 1,
        'SubCategoryID' => 1,
        'View' => 0
    ),

1 => array
    (
        'ProductID' => 616,
        'TextID' => 959,
        'ProductName' => 'Hugo  XY',
        'Price' => 44.95,
        'BTW' => 21,
        'Stock' => 500,
        'BrandID' => 186,
        'ProductImage' => 'https://media.douglas-shop.com/333660/300_0/Hugo_Boss-Hugo_XY.jpg',
        'CategoryID' => 1,
        'SubCategoryID' => 2,
        'View' => 0
    ),

'2' => array
    (
        'ProductID' => 650,
        'TextID' => 991,
        'ProductName' => 'Hugo Just Different',
        'Price' => 45.76,
        'BTW' => 21,
        'Stock' => 500,
        'BrandID' => 186,
        'ProductImage' => 'https://media.douglas-shop.com/617162/300_0/Hugo_Boss-Hugo_Just_Different.jpg',
        'CategoryID' => 2,
        'SubCategoryID' => 1,
        'View' => 0
    ),);
$array1 = array (
1 => array
    (
        'EN' => 'Ladies',
        'NL' => 'Dames'
    ),

2 => array
    (
        'EN' => 'Men',
        'NL' => 'Heren'
    ),);

foreach($array as $newArray){
if (array_key_exists($newArray['SubCategoryID'], $array1)) {
echo    '<pre>';
print_r($newArray);
echo    '</pre>';}}

答案 1 :(得分:0)

上述问题有两种解决方案,一种使用简单的for循环,另一种使用array_walk()函数。

此处,$result_array是您的结果数组,$subcategory_array是您的子类数组。

<强>溶液(1):

$subcategory_ids = array_keys($subcategory_array);

$arrLength = count($result_array);
for($i = 0; $i < $arrLength; ++$i){
    if(!in_array($result_array[$i]['SubCategoryID'], $subcategory_ids)){
        unset($result_array[$i]);
    }
}

// display $result_array
echo "<pre>"; print_r($result_array);

<强>溶液(2):

$subcategory_ids = array_keys($subcategory_array);

function filter_arr($item, $key){
    global $result_array, $subcategory_ids;
    if(!in_array($item['SubCategoryID'], $subcategory_ids)){
        unset($result_array[$key]);
    }
}

array_walk($result_array, "filter_arr");

// display $result_array
echo "<pre>"; print_r($result_array);