php数组替换

时间:2011-09-06 20:38:07

标签: php arrays

我有一个php函数的输出,如下所示

首先输出给我一些这样的东西

INSERT INTO "table1" ('column1', 'column2', 'column3') VALUES (?,?,?)
INSERT INTO "table2" ('column1', 'column2', 'column3','column4','column5') VALUES (?,?,?,?,?)

其他输出提供

Array = (
1 => 'value1',
2 => 'value2',
3 => 'value3',
)

Array = (
1 => 'value1',
2 => 'value2',
3 => 'value3',
4 => 'value4',
5 => 'value5',
)

现在我想做以下事情.. 我该如何更换“?”在第一个INSERT QUERY中,值为value1,value2和value3,第二个查询第二个数组中的值的方式相同。

问候

5 个答案:

答案 0 :(得分:2)

echo $query1 =str_replace("?,?,?","'".implode("','",$values1 )."'",$query1);
echo $query2 =str_replace("?,?,?","'".implode("','",$values2 )."'",$query2);

答案 1 :(得分:1)

这种精确的溶解可以这样完成:

$query1 = "INSERT INTO `table1` (`column1`, `column2`, `column3`) VALUES (?,?,?)";
$query2 = "INSERT INTO `table2` (`column1`, `column2`, `column3`,`column4`,`column5`) VALUES (?,?,?,?,?)";

$values1 = array("value1","value2","value3");
$values2 = array("value1","value2","value3","value4","value5");


function insertIntoQuery($query, $values){
    $countval = count($values);
    $replace = array();
    for($i=0; $i<$countval; $i++){
        $replace[] = '?';
    }
    $implode = implode(",", $replace);
    $values = implode("','", $values);
    $query = str_replace($implode, "'".$values."'", $query);
    return $query;
}

echo insertIntoQuery($query1, $values1);
echo "<br />";
echo insertIntoQuery($query2, $values2);

答案 2 :(得分:1)

通用解决方案:

function replaceWithArray($query, $array) {
    $n = 0;
    return preg_replace('~\?~e', '$array[$n++]', $query);
}

example on Codepad

注意:如果您只想在括号内替换?,请使用这样的lookbehind:preg_replace('~\?(?=[^\(\)]*\))~e', '$array[$n++]', $query);

答案 3 :(得分:1)

如果您使用的是?,?,?在select语句中,它是元语法,MySQL将在运行时用实际值替换这些变量。如果您的格式是可变的,这可能会很危险,但是如果您使用的是静态数据,那么MySQL的第一个猜测将始终是正确的,如果它在开始时正确对齐的话。

根据Php 5.x手册,这个array_replace有一个函数调用,奇怪的是看起来很像你的例子。我正在运行PHP 5.2并且服务器总是只是拒绝这样的函数调用:

致命错误:调用未定义的函数array_replace()

但CLI和mod_php都是5.2xx后的

[root @netnettag dom] #php -i | grep -i版本 PHP版本=&gt; 5.2.10

现在虽然http://php.net/manual/en/function.array-replace.php上的示例说这样替换数组,直到创建编程语言解释器的人赶上了编写手册的人,它似乎没有在vanilla数据中心安装Linux盒子上运行带有PhP rpmforge的CentOS 5.2升级到5.2。自从Php 5.x +支持数组取消引用以来,它确实是一个没有实际意义的点:

$array_1 = array('Tom','Dick','Harry');
$array_1[1] = "Car 54";
print_r($array_1);

输出:     排列     (          [0] =&gt;汤姆          [1] =&gt;车54          [2] =&gt;掠夺     )

如果在取消引用或替换数组值时需要更精细的控制,则不要依赖主数组中的默认索引。创建一个增量计数器,然后用它来转换数组索引,例如$ array [$ i] = array(“Foo”=&gt;“Bar”,“Bar”=&gt;“Foo”);其中$ i是$ i ++。

...或者......如果您使用的是较新版本的Php,您甚至可以从逻辑边界外引用子索引

print_r($array[$i])(0);

:)

答案 4 :(得分:0)

$foo = implode("','",$array);
INSERT INTO "table1" ('column1', 'column2', 'column3') VALUES ('$foo')