在php中更改数组中的键名

在php中更改数组中的键名,php,arrays,Php,Arrays,好的,我正在尝试使用fieldmap数组ie在php中重新映射键值数组的键名。 我希望$outRow数组将$inRow['name1']=10保存到$outRow['name_1']=10中,以获得大量预映射值 $fieldmap=array("name1"=>"name_1","name2"=>"name_2"); private function mapRow($inRow) { $outRow = array();

好的,我正在尝试使用fieldmap数组ie在php中重新映射键值数组的键名。 我希望
$outRow
数组将
$inRow['name1']=10
保存到
$outRow['name_1']=10
中,以获得大量预映射值

        $fieldmap=array("name1"=>"name_1","name2"=>"name_2");

          private function mapRow($inRow) {

            $outRow = array();

            foreach($inRow as $key => $value) {

                $outRow[$this->fieldmap[$key]][] = $value;

            }

            return $outRow;

          }  // end mapRow


  public function getListings($inSql) {

    // get data from new table
    $result = mysql_query($inSql);
    if (!result) {
      throw new exception("retsTranslate SQL Error: $inSql");
    }

    while ($row = mysql_fetch_assoc($result)) {

      $outResult[] = $this->mapRow($row);

    }

    return $outResult;

  }  // end getListings
这不起作用。我正在获取数组,但它使用的是
$outResult[0][keyname]
…我希望这足够清楚:)

尝试以下操作:

function mapRow($inRow) {
$outRow = array();

foreach($inRow as $key => $value) {
    $outRow[preg_replace('/\d/', '_$0', $key,1)] = $value;
}
return $outRow;
}

如果可以将数组的结构设置为键与值对齐的位置(请参见下面的示例),则可以使用。只需知道,您需要绝对确保阵列的顺序正确

<?php

    $fieldmap = array( 'name_1', 'name_2', 'name_3' );

    private function mapRow($inRow)
    {
        $outRow = array_combine( $this->fieldmap, $inRow );

        return $outRow;
    }


我对你的代码行进行了注释并添加了新的一行。它肯定得到了你提到的问题。

你的代码出了什么问题?请看最后一行…很抱歉,我忘了添加duhhold上的那部分。看起来我调用此函数的方式是罪魁祸首。我正在发布更多代码。您缺少一个
$
。请看这一行:
如果(!result){
。谢谢你,杰森……很好的发现!
$fieldmap=array("name1"=>"name_1","name2"=>"name_2");

  private function mapRow($inRow) {

    $outRow = array();

    foreach($inRow as $key => $value) {

        $outRow[$this->fieldmap[$key]][] = $value;

    }

    return $outRow;

  }  // end mapRow


while ($row = mysql_fetch_assoc($result)) {

  //$outResult[] = $this->mapRow($row);
    $outResult[= $this->mapRow($row);

}