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?
İş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.