0

好的..我正在尝试使用字段映射数组重新映射 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]...我希望这足够清楚:)

4

3 回答 3

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

}

我评论了你的代码行并添加了新的..它肯定得到了你提到的问题。

于 2013-09-12T18:20:03.137 回答
0

尝试这个:

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

foreach($inRow as $key => $value) {
    $outRow[preg_replace('/\d/', '_$0', $key,1)] = $value;
}
return $outRow;
}
于 2013-09-12T18:07:37.383 回答
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 );

让我知道这是否有帮助。

于 2013-09-12T18:17:09.587 回答