Для справки о том, почему я это делаю, я пытаюсь использовать 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 содержит следующие элементы:
Сам элемент содержит несколько пар значений ключа из следующих:
Вопросы
тестирование
Так что я начинаю добиваться определенного прогресса, но я немного растерялся. Поскольку в массиве 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>");
}
}
Финальным исправлением было получение элементов во вложенном цикле 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();
}
Других решений пока нет …