У меня были некоторые проблемы с рекурсивным решением этой проблемы, так как я также учусь [установка нуля на счетчик, как показано выше, сотрет текущий счетчик при каждом рекурсивном вызове, и я не решил ошибки ссылки / области при передаче счетчиковв качестве аргументов функции].
Кроме того, мне пришлось изменить обозначение вашего исходного определения массива, чтобы мой тест работал.
A) Я предположил, что ваши ключи должны быть строковыми литералами, а не переменными или константами,Поэтому я добавил обертки.Если они должны были быть переменными, определенными в другом месте, добавьте ваш '$' ..
B) Вам нужно разделить запятую вашего списка элементов в одном массиве, который я добавил
C) Не технически необходимо, ноЯ не использую скобочные обозначения при определении, только при доступе по ключу после создания.Выбор разработчика, но он помогает мне определить, являюсь ли я (создаю или использую существующие) элементы массива, когда вернусь к коду позже.
D) Не забудьте включить ваш ';'после определения массива данных определения массива не являются самозакрывающимися, как у функции или условного кода {} структура
Следует признать, что это несколько менее надежное решение, чем рекурсия, но оно дает вам полный доступ к каждому элементу по ключуи по значению, в этот момент вы можете сообщать или манипулировать значениями по мере необходимости.Ограничение в этом методе заключается в том, что вам нужно знать, сколько уровней вложенности (и, следовательно, сколько циклов foreach).В результате добавление элементов к существующим уровням массива не повлияет на логику цикла.
<?php
function html_pp ( $text ) // no return
{
// echo paragraph to browser
echo PHP_EOL . '<p>' . Sprintf ( $text ) . '</p>' . PHP_EOL;
}
// Data array
$data = Array
(
'Nov 18, 2011' => Array
(
'C' => Array
(
'C' => Array ( 'T' => -1324.388328 ), // comma
'S' => Array ( 'T' => -249.976472 )
)
), // comma
'Dec 24, 2011' => Array
(
'C' => Array
(
'C' => Array ( 'T' => -2523.107928 ), // comma
'S' => Array ( 'T' => 103.533528 )
)
), // comma
'Dec 27, 2011' => Array
(
'C' => Array
(
'C' => Array ( 'T' => -4558.837928 ), // comma
'S' => Array ( 'T' => -1639.376472 )
)
)
); // end array def
// Count variables
$positive = 0;
$negative = 0;
html_pp ( 'Data Array :' );
// Loop using key => value pairs
foreach ( $data as $i => $date ) // Iterate through date elements
{
foreach ( $date as $j => $c ) // Iterate through C elements
{
foreach ( $c as $k => $cs ) // Iterate through C/S elements
{
foreach ( $cs as $n => $t ) // Iterate though T elements
{
// echo current element nesting path and value
html_pp ( $i . '>' . $j . '>' . $k . '>' . $n . ' = ' . $t );
// update +- counts
if ( $t < 0 ) { $negative += 1; }
else { $positive += 1; }
}
}
}
}
html_pp ( 'Positive : ' . $positive );
html_pp ( 'Negative : ' . $negative );
?>
Вывод браузера:
Массив данных:
18 ноября 2011 г.> C>C> T = -1324.388328
18 ноября 2011 г.> C> S> T = -249,976472
24 декабря 2011 г.> C> C> T = -2523.107928
24 декабря 2011 г.> C> S> T = 103,533528
27 декабря 2011 г.> C> C> T = -4558,837928
27 декабря 2011 г.> C> S> T = -1639,376472
Положительный: 1
Отрицательный: 5