Если вам действительно не нравится рекурсия ... try shifting вместо: :)
$a = array(1,2,array(3,4, array(5,6,7), 8), 9);
$o = [];
for ($i=0; $i<count($a); $i++) {
if (is_array($a[$i])) {
array_splice($a, $i+1, 0, $a[$i]);
} else {
$o[] = $a[$i];
}
}
Примечание: в этой простой версии это не поддерживает ключи массива.
Комментарий Мартина Коничека, чтобы полностью отключить выбор элементов самым простым способом:
<ListView>
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="Focusable" Value="false"/>
</Style>
</ListView.ItemContainerStyle>
...
</ListView>
Однако, если вам по-прежнему требуются функциональные возможности ListView, такие как возможность выбора элемента, затем вы можете визуально отключить стилизацию выбранного элемента следующим образом:
Вы можете сделать это несколькими способами, от изменения ListViewItem ControlTemplate до простой установки стиля (намного проще). Вы можете создать стиль для ListViewItems с помощью ItemContainerStyle и «выключить» фон и кисть границы, когда он выбран.
<ListView>
<ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}">
<Style.Triggers>
<Trigger Property="IsSelected"
Value="True">
<Setter Property="Background"
Value="{x:Null}" />
<Setter Property="BorderBrush"
Value="{x:Null}" />
</Trigger>
</Style.Triggers>
</Style>
</ListView.ItemContainerStyle>
...
</ListView>
Кроме того, если у вас нет другого способа уведомить пользователя, когда элемент выбран (или просто для тестирования), вы можете добавить столбец для представления значения:
Depends on the client I guess - I know some desktop readers (sure others do, as well) support feeds that require authentication, and provide a login box when first requesting it - not sure what they are doing behind the scenes to make it work though.