Это простой вопрос программирования, возникший из-за недостатка знаний о том, как PHP обрабатывает копирование и сброс массива во время цикла foreach
. Это так, у меня есть массив, который приходит ко мне из внешнего источника, отформатированный так, как я хочу изменить. Простой пример будет:
$myData = array('Key1' => array('value1', 'value2'));
Но то, что я хочу, было бы что-то вроде:
$myData = array([0] => array('MyKey' => array('Key1' => array('value1', 'value2'))));
Итак, я беру первое $myData
и форматирую как второе $myData
. Я полностью в порядке с моим алгоритмом форматирования. Мой вопрос заключается в том, чтобы найти способ сохранить память, поскольку эти массивы могут быть немного громоздкими. Итак, во время моего цикла foreach
я копирую текущие значения массива в новый формат, а затем сбрасываю значение, с которым я работаю, из исходного массива. E.g.:
$formattedData = array();
foreach ($myData as $key => $val) {
// do some formatting here, copy to $reformattedVal
$formattedData[] = $reformattedVal;
unset($myData[$key]);
}
Является ли звонок на unset()
хорошей идеей здесь? Т.е. сохраняет ли она память, поскольку я скопировал данные и больше не нуждаюсь в исходном значении? Или же PHP автоматически собирает данные, поскольку я не ссылаюсь на них в каком-либо последующем коде?
Код работает нормально, и до сих пор мои наборы данных были слишком незначительными по размеру, чтобы проверять различия в производительности. Я просто не знаю, настраиваю ли я себя на какие-то странные ошибки или ошибки процессора позже.
Спасибо за любые идеи.
-sr