У меня есть этот массив:
`$arr = array(
'foo' => 'foo',
'bar' => array(
'baz' => 'baz',
'candy' => 'candy',
'vegetable' => array(
'carrot' => 'carrot',
),
),
);
и я хочу изменить это на это:
$arr = array(
'0' => 'foo',
'1' => array(
'0' => 'baz',
'1' => 'candy',
'2' => array(
'0' => 'carrot',
)
),
);
Я пробовал функцию array_values, но она меняет только первый уровень, например:
$arr = array(
'0' => 'foo',
'1' => array(
'baz' => 'baz',
'candy' => 'candy',
'vegetable' => array(
'carrot' => 'carrot',
)
),
);
Дипти-код это здорово. Я немного украсил это:
function array_values_recursive(array $arr ) : array {
$result = array();
foreach ($arr as $value) {
$result[] = is_array($value) ? array_values_recursive($value) : $value;
}
return $result;
}
Пожалуйста, используйте ниже функцию. Вы должны повторить цикл рекурсивный / вложенный цикл
function array_values_recursive($arr)
{
$arr2=[];
foreach ($arr as $key => $value)
{
if(is_array($value))
{
$arr2[] = array_values_recursive($value);
}else{
$arr2[] = $value;
}
}
return $arr2;
}
print_r(array_values_recursive($arr))
Это должно работать. Спасибо
это мой настоящий код:
$arr = array();
while($d = mysqli_fetch_assoc($result)) {
$sub_data["id"] = $d["id"];
$sub_data["date"] = $d["date"];
$sub_data["n_trans"] = $d["n_trans"];
$sub_data["doc"] = $d["doc"];
if(!isset($arr[$d['date']])) {
$arr[$d['date']] = array();
}
if(!isset($arr[$d['date']][$d['n_trans']])) {
$arr[$d['date']][$d['n_trans']] = array();
}
array_push($arr[$d['date']][$d['n_trans']], $d['doc']);
}
echo '<pre>';
print_r(array_values($arr));
echo '</pre>';
?>
вот результат запроса, я пытаюсь изменить 2-й уровень ([32weds] => Array), удалить текст и поставить целое число наподобие ([0] => Array):
Array(
[0] => Array(
[text] => 2018-11-01
[nodes] => Array(
[32weds] => Array(
[text] => 32weds
[nodes] => Array
(
[0] => 32.png
[1] => 32 (1).png
)
)
[qwerty] => Array
(
[text] => qwerty
[nodes] => Array
(
[0] => 5384a97ee9d6b (2).pd
)
)
)
)
)
без изменения формата массива.