2016-05-18 9 views
1

Я пытаюсь добавить пары значений ключа в массив с php.Добавление пар значений ключа в php-массив

Когда я эхо из массива, я получаю значения

echo "Key = " . $key . "| Value = " . $value; 

Key = area_id| Value = 4000001Key = area_title| Value = Region 

Все хорошо.

Но когда я пытаюсь добавить эти пары значений ключей в массив «main», массив пуст?

Как показано ниже:

   $main = array(); 

       function recursive($array){ 
        foreach($array as $key => $value){ 
         //If $value is an array. 
         if(is_array($value)){ 
          //We need to loop through it. 
          recursive($value); 
         } else{ 
          //It is not an array, so print it out. 
          //$main[$key] = array (
          // $key = $value 
          //); 

          //echo "Key = " . $key . "| Value = " . $value; 

          $main[$key] = $value; 
         } 
        } 
       } 

Если ключ и ценностей есть, как я могу повторить их, почему они не добавлять в массив?

+0

показать '$ Content array' – RomanPerekhrest

ответ

4

Как ваша функция записана, переменная $main в функции является локальной для этой функции. Изменения, внесенные в эту локальную переменную, не будут влиять на $main, который находится вне функции.

Добавьте это в качестве первой линии в вашей функции:

global $main; 

Это позволит ваша функция, чтобы изменить глобальную переменную.

+0

мммм, добавил, что, по-прежнему возвращая пустой массив? – frobak

+0

@frobak: Работает как и ожидалось. Вы не определяете '$ main' внутри другой функции? Отступы делают его похожим на другую функцию. – AbraCadaver

0

Ваша функция не работает, потому что переменная определена в глобальной области действия, а не в области функций. Один из подходов может заключаться в том, чтобы ввести $main в вашу функцию, используя global $main.

Другой, better, подход заключается в изменении вашей функции, чтобы он возвращал массив результатов.

$array = array(
    'Batman' => 'Robin', 
    'Fruits' => array(
     'Apple', 'Strawberry' 
    ), 
    'Sports' => array(
     'collective' => 'Basketball', 
     'one man show' => 'Running' 
    ) 
); 

$main = array(); 

function recursive($source){ 
    $result = array(); 
    foreach($source as $key => $value){ 
     //If $value is an array. 
     if(is_array($value)){ 
      //We need to loop through it. 
      $result = array_merge($result, recursive($value)); 
     } else{ 
      $result[$key] = $value; 
     } 
    } 

    return $result; 
} 

var_dump(recursive($array)); 
0

Благодарим за помощь. Я думаю, что я был ПУТЬ чрезмерно усложняя это.

Мне просто нужно было напечатать пару значений из каждого массива, и если значение было другим массивом, получите значения из этого.

я нашел и скорректировал ниже функцию, которая очень проста и работает удовольствие

  // recursive function to print areas grouped with their children 
      function RecursiveWrite($array) { 
       foreach ($array as $vals) { 

        echo "<div class='row area_level_rows area_level_" . $vals['area_level'] . "'>"; 
          echo "<div class='col-md-12'>" . $vals['area_name'] . "</div>"; 
        echo "</div>";     

        if(!empty($vals['children'])) { 
        RecursiveWrite($vals['children']); 
        } 
       } 
      } 

      RecursiveWrite($area_tree);