class A
{
public function bla($array)
{
$ids = [];
array_walk_recursive($array, function($value, $key) use (&$ids, $array) {
$ids[] = $value;
});
return $ids;
}
}
$class = new A();
var_dump($class->bla($a));
дык это ж не та функция, в которую можно 3-й параметр передавать. Это 3-й параметр для array_walk_recursive(), а я говорю про callback-функцию, у нее всего 2 параметра. В примере выше - это функция bla() - у нее может быть 2 параметра, у array_walk_recursive() - 3.
function bla(&$value, $key, $logos)
{
if (array_key_exists($value, $logos)) {
$value = $logos[$value];
};
}
array_walk_recursive($a, "bla", $logos);
bool array_walk_recursive ( array &$array , callable $callback [, mixed $userdata = NULL ] )
Если указан необязательный параметр userdata, то он будет передан третьим параметром функции callback.
так можно array_walk в эту функцию засунуть... или я опять что-то упустил? :)
function bla(&$value, $key, $logos)
{
if (array_key_exists($value, $logos)) {
$value = $logos[$value];
};
}
array_walk_recursive($a, "bla", $logos);
$ids = [];
function bla($value, $key, &$ids)
{
$ids[] = $value;
}
array_walk_recursive($a, "bla", $ids);
function bla($value, $key, &$ids)
{
$ids[] = $value;
}
array_walk_recursive($a, "bla", $ids);
array_walk_recursive($a, function(&$b) {
var_dump($b);
});
array_walk_recursive($a, function(&$b) {
$b = rand(1, 1000);
});
Если требуется, чтобы функция callback изменила значения в массиве, определите первый параметр callback как ссылку. Тогда все изменения будут применены к элементам массива.Это я как раз и использую для изменения, а вот получить значения не получается.
function arrayGetIterator($element, $key, $ids)
{
$ids[] = $element;
}
$ids = [];
array_walk_recursive($a, "arrayGetIterator", $ids);
echo "<pre>";
print_r($ids);
echo "</pre>";
function simpleIterator(&$iterator, $logos)
{
while ($iterator->valid()) {
if ($iterator->hasChildren()) {
simpleIterator($iterator->getChildren(), $logos);
}
else {
if ($logos[$iterator->current()]) {
$iterator->offsetSet($iterator->key(), $logos[$iterator->current()]);
};
}
$iterator->next();
}
};
$ai = new RecursiveArrayIterator($a);
$ari = new RecursiveIteratorIterator($ai);
iterator_apply($ai, 'simpleIterator', [$ai, $logos]);
Заполнять надо, а у вас по коду переопределение одной и той же переменной