【问题标题】:array_unique in php with subarray in arrayphp中的array_unique与数组中的子数组
【发布时间】:2015-12-15 07:36:39
【问题描述】:

我如何为这个数组使用 array_unique 函数 `

$mon  = array('9:00AM - 11:00AM','1:00pm-6pm');
$tue  = array('8:00AM - 11:00AM','12:00pm-6pm');
$wed  = array('9:00AM - 11:00AM','1:00pm-6pm');
$thu  = array('9:00AM - 11:00AM','1:00pm-6pm');
$fri  = array('9:00AM - 12:00PM','1:00pm-6pm');
$sat  = array('9:00AM - 7:00PM');
$sun  = array('9:00AM - 12:00AM','1:00pm-6pm');

$a=array($mon , $tue , $wed , $thu , $fri , $sat , $sun);
print_r(array_unique($a));

【问题讨论】:

  • @Lino 链接到德国版手册并诅咒“阅读 $#@$@#$ 手册”的讽刺让我很开心。
  • @Ultimater 哦,我总是忘记这个愚蠢的手册页是地理定位的:-)

标签: php array-unique


【解决方案1】:

您也可以使用此解决方案:

$schedule = array(
    array('9:00AM - 11:00AM','1:00pm-6pm'),
    array('8:00AM - 11:00AM','12:00pm-6pm'),
    array('9:00AM - 11:00AM','1:00pm-6pm'),
    array('9:00AM - 11:00AM','1:00pm-6pm'),
    array('9:00AM - 12:00PM','1:00pm-6pm'),
    array('9:00AM - 7:00PM'),
    array('9:00AM - 12:00AM','1:00pm-6pm'),
);

$schedule = array_map(function ($item) {
    return json_encode($item);
}, $schedule);

// use array_flip to switch keys and values. By doing it the duplicates will be removed    
$json = '[' . implode(',', array_keys(array_flip($schedule))) . ']';
$schedule = json_decode($json);

var_dump($schedule);

【讨论】:

    【解决方案2】:

    你必须为多维数组编写自定义函数, 请参考下面的功能

    function unique_multidim_array($array, $key){
    $temp_array = array();
    $i = 0;
    $key_array = array();
    
    foreach($array as $val){
        if(!in_array($val[$key],$key_array)){
            $key_array[$i] = $val[$key];
            $temp_array[$i] = $val;
        }
        $i++;
    }
    return $temp_array; }
    

    现在,在您的代码中任意位置调用此函数

     $details = unique_multidim_array($details,'id');
    

    如果您的情况必须像 0 或 1 一样传递密钥

    $a=unique_multidim_array($a,0);
    

    【讨论】:

      【解决方案3】:

      对于array_unique(),PHP 手册PHP manual

      两个元素被认为相等当且仅当 (string) $elem1 === (string) $elem2 即当字符串表示相同时,将使用第一个元素

      所以在内部,输入数组的每个元素在比较之前都被转换为字符串。当您将子数组作为元素时,将它们转换为字符串将输出“数组到字符串转换”通知并返回无用的结果:

      var_dump((string)['foo', 'bar']); // string(5) "Array"
      

      幸运的是,构建 array_unique() 的替代品很容易:

      function uniquify(array $arr) {
          return array_reduce(
              $arr,
              function ($carry, $item) {
                  if (!in_array($item, $carry)) {
                      $carry[] = $item;
                  }
                  return $carry;
              },
              []
          );
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-09
        • 2013-12-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-09
        相关资源
        最近更新 更多