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]
...我希望这很清楚:)
答案 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 );
如果有帮助,请告诉我。