2015-04-07 3 views
2

Я хочу сгладить многомерный массив до одномерного, поэтому я использую array_reduce(), чтобы сделать это. Но ударил в этом месте.Array уменьшить значение переменной ouside функции

$array = array 
      (
       1 => array 
        (
         0 => 1, 
         1 => 'a'     
        ), 

       2 => array 
        (
         0 => 2, 
         1 => 'b'     
        ) 
      ) 

Код:

$key = 1; 
$array_reduced = array_reduce($array,function(&$result, $item){  
         $result[] = $item[$key]; 
         return $result;         
         }); 
print_r($array_reduced);  

Выход Должно быть:

Array 
(
    [0] => a 

    [1] => b 
) 

Который показывает Undefined variable: key в этой строке $result[] = $item[$key]; Если я заменю $item[$key] на $item[1] свою работу.

Как использовать $key в array_reduce().

+0

Что такое шаблон за это, что вы только захватить и б? – Rizier123

+0

@ Rizier123 его просто пример, у меня есть массив из 20 индексов, поэтому он должен быть сглажен, он может легко выполняться 'for loop', но имеет любопытство, почему' $ key' не может назначить. – Raja

+0

Он не входит в комплект! – Rizier123

ответ

1

Ну проблема состоит в том, что переменная $key находится вне области видимости функции закрытия. Таким образом, вы можете использовать ключевое слово global (что не самое приятное) или use(). Поэтому я бы рекомендовал вам использовать use() так:

array_reduce($array, function(&$result, $item)use($key){ //<-- See use 
    $result[] = $item[$key]; 
    $key++; //Don't forget to increment your variable 
    return $result; 
}); 
0

Вы ищете что-то вроде этого:

$key = 1; 
$array_reduced = array_reduce($array,function(&$result, $item){ 
         $key++; 
         $result[] = $item[$key]; 
         return $result;         
         }); 
print_r($array_reduced); 

Выход:

Array ([0] => a [1] => b) 
+0

У вас есть ОП? – Raja

Смежные вопросы