PHP многомерный доступ к массиву — пять измерений

Для справки о том, почему я это делаю, я пытаюсь использовать SOAP / AXL WSDL API. Та часть, в которой я сейчас работаю с callenge, создает конструкцию массива таким образом, чтобы я мог получить к ней доступ.

Для справки требования API здесь. Задача, с которой я столкнулся, — это создание массива members для каждого верхнего элемента массива.
https://developer.cisco.com/media/axl-schema-11-0/Files/AXLSoap_AddCssReq.html#Link68

Array Construct:

    `$cssnames = array(
array("name"=>"US-420-blah Gateway",
"description"=>"US-420 Gateway CSS",
"members"=>array(
array(
"member"=>array(
"Index"=>"1",
"Routeparition"=>"fancyParition"),
array("member"=>array(
"Index"=>"2",
"Routeparition"=>"otherpartition")
)))),
array("name"=>"US-420-blah Internal Local DN CallFwd",
"description"=>"US-420 CSS for Call Forward",
"members"=>array(
array(
"member"=>array(
"Index"=>"1",
"Routeparition"=>"fancyParition"),
array("member"=>array(
"Index"=>"2",
"Routeparition"=>"otherpartition")
)))),
array("name"=>"US-420-blah Internal Local LD DN CallFwd",
"description"=>"US-420 for Call Forward LD Allowed",
"members"=>array(
array(
"member"=>array(
"Index"=>"1",
"Routeparition"=>"fancyParition"),
array("member"=>array(
"Index"=>"2",
"Routeparition"=>"otherpartition")
)))),
array("name"=>"US-420-blah Phones Device",
"description"=>"US-420 Device CSS",
"members"=>array(
array(
"member"=>array(
"Index"=>"1",
"Routeparition"=>"fancyParition"),
array("member"=>array(
"Index"=>"2",
"Routeparition"=>"otherpartition")
)))),
array("name"=>"US-420-blah Phones Device Internal Only",
"description"=>"US-420 Device CSS Internal",
"members"=>array(
array(
"member"=>array(
"Index"=>"1",
"Routeparition"=>"fancyParition"),
array("member"=>array(
"Index"=>"2",
"Routeparition"=>"otherpartition")
)))));
foreach($cssnames['members'] as $items){
echo($items['0']['member'] . "</br>");
}`

Цель здесь будет в состоянии использовать foreach чтобы иметь возможность перебирать каждый элемент массива и возвращать целое значение для одного CSS. Таким образом, полный CSS будет следующим:

array("name"=>"US-420-blah Gateway",
"description"=>"US-420 Gateway CSS",
"members"=>array(
array(
"member"=>array(
"Index"=>"1",
"Routeparition"=>"fancyParition"),
array("member"=>array(
"Index"=>"2",
"Routeparition"=>"otherpartition")
)))),

Согласно документации Cisco, CSS содержит следующие элементы:

  • название
  • Описание
  • члены

Сам элемент содержит несколько пар значений ключа из следующих:

  • Индекс
  • RouteParitionName

Вопросы

  1. У меня правильная структура массива? Я думаю, что я делаю, так как каждый «член» должен быть массивом из-за сталкивающихся пар ключ-значение.
  2. Как мне получить доступ к каждому KVP с помощью цикла foreach, если это вообще возможно?
  3. Я просто все об этом говорю?

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

Полу рабочее возвращение.

$cssnames = array("css_list"=>
array("name"=>"US-420-blah Gateway",
"description"=>"US-420 Gateway CSS",
"members"=>array(
array("member"=>array(
"Index"=>"1",
"Routeparition"=>"fancyParition"),
array("member"=>array(
"Index"=>"2",
"Routeparition"=>"otherpartition")
)))));

foreach($cssnames as $items=>$css){
foreach ($css as $name=>$test){
echo($test . "</br>");
foreach($test as $memberlist=>$member){
foreach($member as $memberitems=>$memberdetails){
foreach($memberdetails as $details=>$config){
echo($config . "</br>");
}
}
}
}
}

ОБНОВИТЬ

Так что еще немного прогресса. Я понял, что у меня есть массив, содержащий только один элемент массива. Так бессмысленно. После того, как я удалил это, кажется, имеет больше смысла. Сейчас я перехожу к дальнейшему тестированию. Обновленный код:

$cssnames = array("css_list"=>
array("name"=>"US-420-blah Gateway",
"description"=>"US-420 Gateway CSS",
"members"=>array(
array(
"Index"=>"1",
"Routeparition"=>"fancyParition"),
array(
"Index"=>"2",
"Routeparition"=>"otherpartition")
)));

foreach($cssnames as $level1){
echo($level1['name'] . "</br>");
echo($level1['description'] . "</br>");

foreach ($level1['members'] as $level2){
echo($level2['Index'] . "</br>");
echo($level2['Routeparition'] . "</br>");
}
}

0

Решение

Финальным исправлением было получение элементов во вложенном цикле foreach в правильном порядке.

    foreach($csslist as $level1) {
$cssname = $level1['name'];
$cssdescription = $level1['description'];

foreach($level1['members'] as $level2){
$members[] = array(
"index"=>$level2['index'],
"routePartitionName"=>$level2['routePartitionName']);
}
$programTags[] = array(
"name"=>"$cssname",
"description"=>"$cssdescription",
"members"=>$members);
//Empty the Members array for the next loop iteration
$members = array();
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]