[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Возврат из функции (интерфейсы+функции)
Tom
<?php

interface
ArrayHelperInterface extends
IteratorAggregate,
ArrayAccess,
Countable {

/**
*
@param ArrayHelperInterface|ArrayObject|array $array
*/

function __construct($array);

/**
* Creates a new array with the results of calling a provided function on every element in the ArrayHelperInterface.
*
@param $callback
*
@return ArrayHelperInterface
*/

public function map($callback);

/**
* Calls a function for each element in the ArrayHelperInterface.
*
@param $callback
*
@return void
*/

public function each($callback);

/**
* Returns true if at least one element in the array satisfies the provided testing function.
*
@dev must finish iteration after first matching
*
@param Closure|string $callback
*
@return boolean
*/

public function some($callback);

/**
* Returns true if every element in the array satisfies the provided testing function.
*
@param Closure|string $callback
*
@return boolean
*/

public function every($callback);
}

class ArrayHelper implements ArrayHelperInterface
{
public $array;
public function __construct($array) {
$this->array = $array;

}

public function count() {
return ++$this;

}

public function each($callback) {
foreach ($this->array as $key => $value)
$callback($key, $value, $this);
}

public function every($callback) {
foreach ($this->array as $key => $value ) {
if(!$callback ( $key, $value, $this )) {
return false;
}
}

return true;
}
public function some($callback) {
$flag = false;
foreach ($this->array as $key => $value)
{
if ($callback($key, $value, $this))
$flag = true;
}
return $flag;
}
public function getIterator() {
return new ArrayIterator($this);

}

public function map($callback) {
foreach ($this->array as $key => $value )
$callback ( $key, $value, $this );
return $this->array;
}

public function offsetSet($offset, $value) {
if (is_null($offset)) {
$this->container[] = $value;
} else {
$this->container[$offset] = $value;
}
}

public function offsetExists($offset) {
return isset($this->container[$offset]);
}
public function offsetUnset($offset) {
unset($this->container[$offset]);
}
public function offsetGet($offset) {
return isset($this->container[$offset]) ? $this->container[$offset] : null;
}


}


$array = array('_0' => 0);

$array = new ArrayHelper($array);

$func = function ($key, $value, ArrayHelperInterface $array) {
static $i;
$i++;
$c = count($array);
if (is_string($key) && $c < $value) {
unset($array[$key]);
return true;
} else {
$array['_'.$i] = --$c;
return false;
}
}
;
$array->each($func);

var_dump(iterator_to_array($array));
echo '<br>';

$array->some($func);
var_dump(iterator_to_array($array));
echo '<br>';

?>



При первом вызове
$array->each($func); 
var_dump(iterator_to_array($array));
данные отдаются верно, но при втором вызове
$array->some($func);
var_dump(iterator_to_array($array));
данные отдаются по старому array который равен = array('_0' => 0), а не по обработанному array который после $array->each($func); должен равняться = array('_0' =>0, '_1' =>0).
Подскажите пожалуйста как написать код так что бы на выходе получать данные по уже обработанному масиву.
В результате должно отдавать array(4) {'_0' =>int(0), '_1' =>int(0), '_2' =>int(1),'_3' =>int(2)}
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.