(Python seti gibi) farklı unsurları ile PHP dizi

6 Cevap php

Tüm unsurlar gibi farklı olmalıdır PHP dizi sınıfının bir sürümü var mı, örneğin, Python belirliyor?

6 Cevap

Hayır. Sen tuşları "set" ve değerler göz ardı edilir de unsurlardır bir ilişkisel dizi kullanarak sahte elinden.

Sen çiftleri filtrelemek için özel bir sınıf veya array_unique kullanabilirsiniz.

Bir dizi bir dizidir, ve çoğunlukla yo içine her şeyi koyabilirsiniz. Tüm anahtarlar benzersiz olmalıdır. Gittiğiniz ve yinelenen değerlere soyarak bir işlev eklemek istiyorsanız, basitçe bir array_unique açıklama yaparak çok mümkün

İşte sonunda istediğini için işe yarayabilir bir fikir bir ilk taslak.

<?php

class DistinctArray implements IteratorAggregate, Countable, ArrayAccess
{
  protected $store = array();

  public function __construct( array $initialValues )
  {
    foreach ( $initialValues as $key => $value )
    {
      $this[$key] = $value;
    }
  }

  final public function offsetSet( $offset, $value )
  {
    if ( in_array( $value, $this->store, true ) )
    {
      throw new Exception( 'Values must be unique!' );
    }
    if ( null === $offset )
    {
      array_push( $this->store, $value );
    } else {
      $this->store[$offset] = $value;
    }
  }

  final public function offsetGet( $offset )
  {
    return $this->store[$offset];
  }

  final public function offsetExists( $offset )
  {
    return isset( $this->store[$offset] );
  }

  final public function offsetUnset( $offset )
  {
    unset( $this->store[$offset] );
  }

  final public function count()
  {
    return count( $this->store );
  }

  final public function getIterator()
  {
    return new ArrayIterator( $this->store );
  }
}

$test = new DistinctArray( array(
    'test' => 1
  , 'foo'  => 2
  , 'bar'  => 3
  , 'baz'  => '1'
  , 8      => 4
) );

try {
  $test[] = 5;
  $test[] = 6;
  $test['dupe'] = 1;
}
catch ( Exception $e )
{
  echo "Oops! ", $e->getMessage(), "<hr>";
}

foreach ( $test as $value )
{
  echo $value, '<br>';
}

Tamsayılar ve dizeleri olmayan nesneler için: SplObjectStorage

SplObjectStorage sınıf veri, bir nesne kümesi görmezden gelerek, veri nesnelerinin bir harita sağlar ya.

Bir temel şekilde size array_unique(), belki bu dizideki çoğaltmaları önlemek için yardımcı olabilir deneyebilirsiniz.