В PHP, как я могу построить неизменную трубопровод для эффективного трансформации больших вложенных массивов без глубокиPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 В PHP, как я могу построить неизменную трубопровод для эффективного трансформации больших вложенных массивов без глубоки

Сообщение Anonymous »

Я работаю с очень большими вложенными ассоциативными массивами в PHP и хочу применить несколько преобразований (карт, фильтр, слияние, решап и т. Д.), Не мутируя исходный массив. Функции. < /p>
В идеале поддержать ленивую оценку (например, генераторы) для эффективности памяти. < /p>
Например, что -то вроде: < /p>
$data = [
'users' => [
['id' => 1, 'name' => 'Alice', 'active' => true],
['id' => 2, 'name' => 'Bob', 'active' => false],
]
];

// Desired pipeline (pseudocode)
$result = pipeline($data)
->map(fn($u) => ['id' => $u['id'], 'name' => strtoupper($u['name'])])
->filter(fn($u) => $u['active'])
->toArray();

< /code>
Но мои текущие попытки либо: < /p>
Скопируйте массив несколько раз (слишком медленные), либо < /p>
теряет читаемость, когда я переключается на генераторы. быть эффективным памятью?$mapped = array_map(fn($u) => ['id' => $u['id']], $data['users']);
$filtered = array_filter($mapped, fn($u) => $u['id'] % 2 === 0);
< /code>
Это работает, но дублирует массивы несколько раз, что увеличивает использование памяти. < /p>
Я также экспериментировал с генераторами: < /p>
function mapUsers($users) {
foreach ($users as $u) {
yield ['id' => $u['id'], 'name' => strtoupper($u['name'])];
}
}
< /code>
Это сохраняет память, но когда я цепляю многочисленные операции, она становится грязной и теряет читаемость по сравнению с трубопроводом. код.

Подробнее здесь: https://stackoverflow.com/questions/797 ... d-arrays-e
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»