在php中更改数组中的键名

时间:2013-09-12 17:54:30

标签: php arrays

ok ..我正在尝试使用fieldmap数组重新映射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] ...我希望这很清楚:)

3 个答案:

答案 0 :(得分:1)

$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);

}

我对您的代码行进行了评论,并添加了新代码。确实得到了您提到的内容。

答案 1 :(得分:0)

试试这个:

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

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

答案 2 :(得分:0)

如果您可以将数组构建到键与值对齐的位置(请参阅下面的示例),则可以使用PHP array_combine()。只要知道你需要确保正确排列数组。

<?php

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

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

        return $outRow;
    }


例如,如果您的阵列是:
array( 'name1' => 10, 'name2' => 20, 'name3' => 30 );

新的结果将是:
array( 'name_1' => 10, 'name_2' => 20, 'name_3' => 30 );

如果有帮助,请告诉我。