Я пытаюсь написать крошечную функцию для преобразования значений status и total в целое число в моем многомерном массиве, я думаю, мне нужно использовать array_map или array_walk? :
array (
0 =>
array (
'status' => '0',
'total' => '6',
),
1 =>
array (
'status' => '1',
'total' => '37',
),
2 =>
array (
'status' => '2',
'total' => '8',
),
)
чтобы получить этот результат
array (
0 =>
array (
'status' => 0,
'total' => 6,
),
1 =>
array (
'status' => 1,
'total' => 37,
),
2 =>
array (
'status' => 2,
'total' => 8,
),
)
В следующий раз включите свою попытку или отредактируйте и добавьте свою попытку, даже если это катастрофа. В противном случае вы, скорее всего, получите отрицательный отзыв.






Поместите значения каждого подмассива через intval:
<?php
$data =
[
[
'status' => '1',
'total' => '2',
],
[
'status' => '3',
'total' => '4'
],
];
$result = array_map(fn($v)=>array_map('intval', $v), $data);
var_dump($result);
Выход:
array(2) {
[0]=>
array(2) {
["status"]=>
int(1)
["total"]=>
int(2)
}
[1]=>
array(2) {
["status"]=>
int(3)
["total"]=>
int(4)
}
}
Или просто трансформируйте листья на месте:
array_walk_recursive($data, function(&$v) { $v = (int) $v; });
И простой foreach с жонглированием типа:
foreach($data as &$v) {
$v['status']+=0;
$v['total'] +=0;
}
unset($v);
Спасибо за то, что оба подхода очень приятные, я многому научился с этим
Foreach не намного длиннее (однострочный): foreach($data as&$a)foreach($a as&$v)$v=(int)$v;unset($v,$a); Если вас не волнуют оборванные ссылки, их можно еще уменьшить.
Играл в гольф: foreach($data as&$a)foreach($a as&$v)$v+=0;
интересно, не является ли базовый foreach() (намного) быстрее...
Аргумент в пользу foreach заключается в том, что он явный и, вероятно, его меньше нужно изучать/запоминать. Эта версия соответствует Php 4.3–8: 3v4l.org/0tQCv
Вы хорошо догадываетесь.