PHP array_diff有实例还是自定义回调函数?

时间:2012-11-11 11:23:05

标签: php arrays multidimensional-array

我有很多数组,每个数组都包含Product的实例。只需要获得独特的产品。来自array_diff的PHP文档:

array array_diff ( array $array1 , array $array2 [, array $... ] )
  

当且仅当(字符串)$ elem1 ===时,才认为两个元素相等   (字符串)$ elem2。用文字表示:当字符串表示相同时。

这是否意味着我被迫在我的实例中实现toString()?是否有任何函数来计算提供自定义回调的差异?

我没有测试过这段代码,但我想它不起作用,因为toString()中没有Product函数:

$categories = array();
// ...

// Unique products from all categories, compared against ===
$uniqueProducts = array();

// Compute unique products
foreach($categories as $category) {
    $uniqueProducts += array_diff($category->getProducts(), $uniqueProducts)
}

return $uniqueProducts;

2 个答案:

答案 0 :(得分:1)

  

这是否意味着我被迫在我的实例中实现toString()?

根据PHP文档手册中的typecast section - 您不需要toString()函数。基本上,类型转换(字符串)与您只是var_dump($uniqueProducts)

的情况相同

array_diff正在做的就是对数组进行类型转换。

一种选择是制作自己的“array_diff”功能

function my_array_diff($arraya, $arrayb)
{
    foreach ($arraya as $keya => $valuea)
    {
        // Put your own 'test' here - but for example this uses in_array()
        if (in_array($valuea, $arrayb))
        {
            unset($arraya[$keya]);
        }
    }
    return $arraya;
}

答案 1 :(得分:0)

如果产品清单很短,您可以根据您选择的值实施自己的检查吗?

$uniqueProducts = array();
foreach($productsOne as $productOne) {
  foreach($uniqueProducts as $alreadyListed) {
    if($productOne->getName() != $alreadyListes->getName()) { // You can customise this line to make more specific
      break;
    }
    $uniqueProducts = $productOne; // If product hasn't already been added to the array then it's unique.
  }
}
// Repeat foreaches for second product array, or combine them before teh foreach using $productOne = $productOne+$productTwo.