Как получить последний ключ со значениями из массива массивов? PHP - PullRequest
0 голосов
/ 03 марта 2011

Это то, что я сейчас использую

<?php $sidebar = $this->data['sidebar']; 
$lastKey = array_pop(array_keys($sidebar));
$sidebar = $this->data['sidebar'][$lastKey]; ?>
<?php foreach($sidebar as $key => $item) { ?>
<li id="<?php echo Sanitizer::escapeId( "pt-$key" ) ?>"<?php
    if ($item['active']) { ?> class="active"<?php } ?>><a href="<?php echo htmlspecialchars($item['href']) ?>"><?php echo htmlspecialchars($item['text']) ?></a></li>
<?php } ?>

Это то, что я получаю (http://pastebin.com/t6Y2ZtMF), когда я print_r($sidebar); Я хочу получить last Array , который равен Categories , и превратить его в ссылки.

Я новичок в php, поэтому мой метод может быть неправильным, даже если он работает. Есть ли правильный способ получить массив Categories или приведенный выше код хорош как есть?

Ответы [ 5 ]

5 голосов
/ 03 марта 2011
$lastValue = end($array);
$lastKey = key($array); // current key, which is the last since you called end()

После обновления:

Кажется, вам не нужен ключ, только массив:

<?php $lastSidebarValue = end($this->data['sidebar']); ?>
<?php foreach ($lastSidebarValue as $key => $item) : ?>
    business as usual...
<?php endforeach; ?>

Поскольку вы знаете, что вам нужен ключ 'Categories' хотя (а не последний ключ), это кажется наиболее логичным, что нужно сделать:

<?php foreach ($this->data['sidebar']['Categories'] as $key => $item) : ?>
    business as usual...
<?php endforeach; ?>
2 голосов
/ 03 марта 2011

Если вы хотите получить пару ключ / значение без выталкивания и нажатия на массив, установите внутренний курсор на конец массива, а затем используйте list и each, чтобы получить ключ и значение.

// set up your array however you had it
$array = ...;

// move the cursor to the end of the array
end($array);

// use list() and each() to extract your key/value pair    
list($key,$val) = each($array);  

// $key will now have the last key
// $val will have the last value
2 голосов
/ 03 марта 2011

Я думаю, что функция end () была бы отличным решением: http://php.net/manual/en/function.end.php По сути, она возвращает значение последнего элемента в массиве, переданного ей.

$sidebar = end($sidebar);
1 голос
/ 03 марта 2011

Вы можете использовать `end ()` вместо `array_pop ()`.Но оба работают для ** последнего элемента ** массива.Единственное отличие состоит в том, что `end ()` ** указывает ** на ** последний элемент ** массива, не воздействуя на него, и на `array_pop ()` ** выскакивает ** элемент из ** end ** массива.

Для получения подробной информации перейдите по следующим ссылкам

end () | array_pop ()

1 голос
/ 03 марта 2011

возможно, конец :

$fruits = array('apple', 'banana', 'cranberry');
echo end($fruits); // cranberry
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...