2

我有一个多维数组,如下所示:

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

我正在尝试循环数组并使用 str_replace 替换“new_id”的“object_id”键。

$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
     }
    }
  }

上面的代码不起作用,你能看到我做错了什么吗?我尝试使用字符串而不是变量,但也没有用。提前致谢。

4

3 回答 3

1

...如果你真的想使用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']);

(如果重要,这将重新排列数组)

于 2013-06-19T23:20:35.337 回答
1
foreach ($array as &$value) {
  foreach ($value as $key2 => &$value2) {
    $value2[$rep] = $value2[$str];
    unset($value2[$str]);
  }
}

有必要使用引用迭代数组,以便修改影响原始数组,而不是副本。

于 2013-06-19T23:20:43.420 回答
0

@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'],
                         );
              }
    }
于 2013-06-20T15:11:24.820 回答