2013-03-05 2 views
0

У меня есть массив с именем $plugins, который выглядит примерно так:PHP - получить КЛЮЧ вложенного массива

Array 
(
    [path/to/file.php] => Array 
     (
      [Name] => somevalue_a 
      [TextDomain] => somevalue_b 
      [value_c] => somevalue_c 
      [value_d] => somevalue_d 
      ... 
      ... 
      .. 

     ) 
    [path/to/file2.php] => Array 
     (
      [Name] => somevalue_a 
      [TextDomain] => somevalue_b 
      [value_c] => somevalue_c 
      [value_d] => somevalue_d 
      ... 
      ... 
      .. 
     ) 
) 

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

function get_plugin_data(){ 

    foreach ($plugins as $plugin => $data) { 
    $plugin_data = $plugins[$plugin]; 

    // Start simple DEBUG 
    echo '</br>===============================</br>' ; 
    echo '</br><b>Plugin Name : </b>'. $data[Name]; .'</br>' ; 
    echo '</br><b>Plugin Path : </b>'. key($plugins) .'</br>' ; // <-- Problem here 
    echo '</br>TextDomain set : '. $data[TextDomain] .'</br>' ; 
    echo '</br>===============================</br>' ; 
    // End DEBUG 
    } 
} 

При использовании key($plugins) это дает мне всегда одинаковое значение (первый один). При использовании key($data) это дает мне ПЕРВЫЙ ПИСЬМО только. (??)

Как я могу получить этот ключ каждого вложенного массива?

+2

просто верните '$ плагин', а не' key ($ plugin) '. $ plugin уже должен быть ключом. – kennypu

+0

@ kennypu мой бог .. Слишком бессонная. Ты прав . Добавить как ответ, и я соглашусь. –

ответ

1

просто вернуть $plugin, не key($plugin). $plugin уже должен быть ключом.

разработать, когда вы используете синтаксис:

foreach ($plugins as $plugin => $data)

он устанавливает $plugin к ключу, и $data ей это значение.

+0

ok, Got it. Но тогда почему ключ ($ data) дает мне одно (первое) письмо? –

+0

@ObmerkKronen это интересный вопрос, я бы предположил, что это должно быть ошибкой, поскольку $ plugin в этом случае является строкой, а не массивом. Даже если строки были обработаны как массив, он должен вернуть '0' не первый символ строки. Я понятия не имею. – kennypu

1

Ваш цикл foreach указывает, что путь доступен как $plugin. Используйте это

foreach ($plugins as $plugin => $data) { 
         //^This represents the key of the array item 
    $plugin_data = $plugins[$plugin]; 

    // Start simple DEBUG 
    echo '</br>===============================</br>' ; 
    echo '</br><b>Plugin Name : </b>'. $data[Name]; .'</br>' ; 
    echo '</br><b>Plugin Path : </b>'. $plugin .'</br>' ; // <-- Problem here 
    echo '</br>TextDomain set : '. $data[TextDomain] .'</br>' ; 
    echo '</br>===============================</br>' ; 
    // End DEBUG 
    } 
+0

спасибо, я понял от ответа kennzpu простой факт (что мне нужно больше спать :-)) .. Большое спасибо. –

0

Проверьте эту модификацию на свой код, она работает сейчас.

<?php 
    $plugins = Array 
    (
     'array1' => Array 
      (
       'name' => 'somevalue_a', 
       'TextDomain' => 'somevalue_b', 
       'value_c' => 'somevalue_c', 
       'value_d' => 'somevalue_d' 

      ), 
     'array2' => Array 
      (
       'name' => 'somevalue_a', 
       'TextDomain' => 'somevalue_b', 
       'value_c' => 'somevalue_c', 
       'value_d' => 'somevalue_d' 

      ) 
    ); 

    function get_plugin_data($plugins){ 

     foreach ($plugins as $plugin => $data) { 
     $plugin_data = $plugins[$plugin]; 

     // Start simple DEBUG 
     echo '</br>===============================</br>' ; 
     echo '</br><b>Plugin Name : </b>'. $data['name'] .'</br>' ; 
     echo '</br><b>Plugin Path : </b>'. key($plugins) .'</br>' ; // <-- Problem here 
     echo '</br>TextDomain set : '. $data['TextDomain'] .'</br>' ; 
     echo '</br>===============================</br>' ; 
     // End DEBUG 
     } 
    } 
    get_plugin_data($plugins); 
    //print_r($plugins); 
?> 
Смежные вопросы