在PHP中将数组键转换为数字

6
这对于你们那些精通php的高手来说可能是个简单的问题,但我在谷歌上找不到答案!
我有一个多维数组,其中第一组键是命名的,我想将它们更改为数字,如0、1、2等。
如果它是一个普通的数组,我可以设置$newArray = array_values($multiArr); 它会摆脱键并使它们成为数字!但由于它是多维的,这里面还有另一组键/值。
我是否可以使用循环来循环遍历它并定义每个键?但是我该如何指定当前键?
任何建议都会帮助,谢谢!
如果这有所帮助,传入的数据是从设备接收到的JSON,并且编码存在问题,因此数据看起来像这样:
“阵列(     [�w� ��߯19�] => Array         (             [down] => 1279146141431             [up] => 1279146351453         ) ”
因此,我需要以某种方式访问每个疯狂键下面的数据。
4个回答

29
这段代码:
$arr = array(
  'a' => array('a' => '1', 'b' => '2', 'c' => '3'),
  'b' => array('d' => '4', 'e' => '5', 'f' => '6'),
  'c' => array('g' => '7', 'h' => '8', 'i' => '9'),
);
$arr2 = array_values($arr);
产生的结果以 $arr2 的形式呈现:
[0] => Array
    (
        [a] => 1
        [b] => 2
        [c] => 3
    )

[1] => Array
    (
        [d] => 4
        [e] => 5
        [f] => 6
    )

[2] => Array
    (
        [g] => 7
        [h] => 8
        [i] => 9
    )

这不就是你想要得到的吗?


这个可行,我没想到它可以这样使用,非常感谢你! - Doug Molineux
没错:array_values() 不会影响数组的低层级。 - JavadocMD
你的测试数据不是一个多维的、有键的数组。你的第二层数组已经从0开始索引。 - Peter Bailey
好的,我已经为所有维度添加了键。正如您所看到的,array_values() 仍然不会干扰子级键。 - JavadocMD

2
一点递归就可以解决问题。
$data = array(
    'foo' => 'bar'
  , 'bar' => 'baz'
  , 'baz' => array(
        'foo' => 'bar'
      , 'bar' => 'baz'
      , 'baz' => array(
            'foo' => 'bar'
          , 'bar' => 'baz'
          , 'baz' => 'foo'
        )
    )
  , 'foo2' => 'bar'
  , 'bar2' => 'baz'
  , 'baz2' => array(
        'foo' => 'bar'
      , 'bar' => 'baz'
      , 'baz' => 'foo'
     )
);

print_r( $data );

$data = removeKeys( $data );

print_r( $data );

function removeKeys( array $array )
{
  $array = array_values( $array );
  foreach ( $array as &$value )
  {
    if ( is_array( $value ) )
    {
      $value = removeKeys( $value );
    }
  }
  return $array;
}

我有一个多维数组,其中第一组键被命名,我想将它们改为像0、1、2这样的数字。这意味着原帖作者只想重新索引第一级。 - JavadocMD
这正是我正在寻找的!谢谢! - David Ericsson

0

我并没有完全理解你的数组结构,但是你可以通过多种方式迭代多维关联数组。这里有一种方法可以构建一个数字索引数组:

$multiArray = Array(/* stuff */);
$numericArray = Array();
foreach ($multiArray as $key => $val) {
    foreach ($val as $childKey => $childVal) {
        // do something else?
    }
    $numericArray []= $val;
}

0
$array = array("name"=>"sima", "lastname"=>"johansoon");

$newArray = array();
foreach($array as $key=>$value) {
    array_push($newArray, $value);

}
print_r($newArray);

3
欢迎来到 Stack Overflow。虽然这段代码可能回答了问题,但是提供关于为什么和/或如何回答问题的额外上下文信息可以提高其长期价值。回答问题的方式 - Popo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接