menriquez
menriquez

Reputation: 249

change key names in array in php

ok..I'm trying to re-map the keynames of a key-value array in php using a fieldmap array ie. i want the $outRow array to hold $inRow['name1'] = 10 to $outRow['name_1'] = 10 for a large set of pre-mapped values..

        $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

this is not working..I'm getting the array but its using $outResult[0][keyname]...I hope this is clear enough :)

Upvotes: 0

Views: 1196

Answers (3)

Deewendra Shrestha
Deewendra Shrestha

Reputation: 2465

Try this:

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

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

Upvotes: 0

Subash
Subash

Reputation: 230

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

}

I commented your line of code and added new one..it definitely got what you mentioned in question.

Upvotes: 1

Jason
Jason

Reputation: 1962

If you can structure your arrays to where the keys align with the values (see example below) you can use PHP array_combine(). Just know that you will need to make absolutely sure the array is ordered correctly.

<?php

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

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

        return $outRow;
    }


For example, if your array was:
array( 'name1' => 10, 'name2' => 20, 'name3' => 30 );

The new result would be:
array( 'name_1' => 10, 'name_2' => 20, 'name_3' => 30 );

Let me know if this helps.

Upvotes: 0

Related Questions