2014-01-09 6 views
0

Я хотел бы найти правильный ключ, содержащий выбранный массив. В настоящий момент код выдает следующий ключ массива 3, а не 2. Это кажется очень простым. Я мог бы исправить это, просто вычитая 1, но это кажется проблематичным, потому что последний массив художников перекликается с позицией 0. Может ли кто-нибудь помочь? (мне нужно, чтобы найти этот ключ, так что я могу правильно установить рядом и предыдущие значения.)Найти родительский ключ в многомерном массиве php

sample_entries.xml

<?xml version="1.0"?> 
<entries> 
    <entry> 
     <rank>1</rank> 
     <id>koons_jeff</id> 
     <firstname>Jeff</firstname> 
     <lastname>Koons</lastname> 
     <bcountry>US</bcountry> 
     <byear>1955</byear> 
    </entry> 
    <entry> 
     <rank>2</rank> 
     <id>richter_gerhard</id> 
     <firstname>Gerhard</firstname> 
     <lastname>Richter</lastname> 
     <bcountry>DE</bcountry> 
     <byear>1932</byear> 
    </entry> 
    <entry> 
     <rank>5</rank> 
     <id>doig_peter</id> 
     <firstname>Peter</firstname> 
     <lastname>Doig</lastname> 
     <bcountry>UK</bcountry> 
     <byear>1959</byear> 
    </entry> 
    <entry> 
     <rank>7</rank> 
     <id>marden_brice</id> 
     <firstname>Brice</firstname> 
     <lastname>Marden</lastname> 
     <bcountry>US</bcountry> 
     <byear>1938</byear> 
    </entry> 
</entries> 

index.php

<?php 
$xml = simplexml_load_file('sample_entries.xml'); 
$path = $xml->xpath('entry'); 
//strip simple xml tags. 
$array = json_decode(json_encode($path) , 1); 
print_r($array); 
// cannot change the above XML structure. 

echo '<br><br>'; 


// set page's unique identifier. 
$artist = 'doig_peter'; 


foreach($array as $element => $inner_array) { 

    if($artist == $inner_array[id]) { 
     $current_artist = $inner_array; 
     extract($current_artist); 
     echo '<b>Current Artist: </b>'.$firstname.' '.$lastname.' - '.$bcountry.'-'.$byear.'<br><br>'; 
     echo key($array); 
    } 
} 
?> 

Здесь токовый выход Спереди выше кода. Я хотел бы, чтобы последний номер «[3]» сообщал правильный ключ, который содержит данные для идентификатора, который является «[2]»:

Array ([0] => Array ([rank] => 1 [id] => koons_jeff [firstname] => Jeff [lastname] => Koons [bcountry] => US [byear] => 1955) [1] => Array ([rank] => 2 [ id] => richter_gerhard [firstname] => Gerhard [lastname] => Richter [bcountry] => DE [byear] => 1932) [2] => Array ([rank] => 5 [id] => doig_peter [firstname] => Peter [lastname] => Doig [bcountry] => UK [byear] => 1959) [3] => Array ([rank] => 7 [id] => marden_brice [имя] => Brice [lastname] => Marden [bcountry] => США [byear] => 1938))

Текущий Исполнитель: Peter Doig - UK-1959

+0

Возможный дубликат [PHP - Найти родительский ключ массива] (http://stackoverflow.com/questions/2504685/php-find-parent-key-of-array) – Mike

+0

Это только я или вопрос кажется неясным ? ... Может быть, это может быть перефразировка или реструктуризация, поэтому вопрос ясен? Не могли бы вы добавить раздел с результатами? – Sebastien

+0

Себастьян, я добавил результаты, чтобы помочь объяснить. Майк, я попытался выяснить код, с которым вы связались, но не увенчался успехом. Я только начал преподавать php около месяца назад, и я все время разбираюсь в делах, но адаптация другого кода по-прежнему является проблемой для меня. – user2714240

ответ

2

Вместо

echo key($array); 

вы хотите

echo $element; 

поскольку $ element - это переменная, назначенная в вашем foreach loo p, чтобы удерживать текущий ключ.

+0

Спасибо! Я знал, что чего-то не хватает. Я продолжал пытаться вернуть ключ элемента, указав «echo key ($ element)»; который возвратил ошибку. Это помогает мне значительно! – user2714240

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