У меня есть многомерный массив, например:
Array ( [results] => Array ( [0] => Array ( [object_id] => 13 [id] => 13 [idno] => e00110-o00005-2010-PROG [display_label] => La Bohème / PUCCINI - 2010 [ca_objects.description] => Libreto de Luigi Illica y Giuseppe Giacosa basado en Escenas de la vida bohemia de Henri Murger Nueva producción – Teatro Colón [ca_objects.type_id] => Programa de mano ) //more data here
Я пытаюсь зациклить массив и заменить ключ «object_id» для «new_id» с помощью str_replace.
$str="object_id";//The string to search for $rep="new_id";//The replacement string foreach ($array as $value) { foreach ($value as $key2 => $value2) { foreach ($value2 as $key3 => $value3) { str_replace($str,$rep,$key3); echo $key3." : ".$value3."<br>"; //It gets printed with no changes } } }
Вышеприведенный код не работает, видите ли, что я делаю неправильно? Я пытался использовать строки вместо переменных, но не работал. Заранее спасибо.
… если вы действительно хотите использовать str_replace()
:
$array['results'] = array_map(function($item){ $keys = implode(',', array_keys($item)); $keys = str_replace('object_id', 'new_id', $keys); return array_combine(explode(',', $keys), array_values($item)); }, $array['results']);
Другой способ – создать новый массив, затем перебрать старый массив и назначить значения из него новому массиву, а также изменить нужные вам ключи:
$array['results'] = array_map(function($item){ $item['new_id'] = $item['object_id']; unset($item['object_id']); return $item; }, $array['results']);
с$array['results'] = array_map(function($item){ $item['new_id'] = $item['object_id']; unset($item['object_id']); return $item; }, $array['results']);
(это изменит порядок массива, если это имеет значение)
foreach ($array as &$value) { foreach ($value as $key2 => &$value2) { $value2[$rep] = $value2[$str]; unset($value2[$str]); } }
сforeach ($array as &$value) { foreach ($value as $key2 => &$value2) { $value2[$rep] = $value2[$str]; unset($value2[$str]); } }
Необходимо перебирать массивы с использованием ссылок, чтобы изменения влияли на исходный массив, а не на копию.
@One Trick Pony: Я последовал твоему предложению и создал новый массив. Это было именно то, что мне было нужно, и я сделал это сам! Следующий код создает новый массив. Большое вам спасибо за помощь!
$display=array(); foreach ($array as $value) { foreach ($value as $value2) { $display [] = array ( 'Id del objeto' => $value2['object_id'], 'Título' => $value2['display_label'], 'Descripción' => $value2['ca_objects.description'], ); } }