【问题标题】:PHP merge arrays so data is sequential for both sets $a[0] $b[0] $a[1] $b[1] [closed]PHP 合并数组,因此两个集合的数据都是连续的 $a[0] $b[0] $a[1] $b[1] [关闭]
【发布时间】:2026-02-09 07:30:01
【问题描述】:

如何合并数组以使输出看起来像这样?

($a[0] $b[0] $a[1] $b[1] $a[2] $b[2]...)

问题的背景故事

我正在尝试使用两个数组中的数据(字符串)构建一个字符串到 构建一些 Sql。

这是我从代码中得到的错误集。

数组([0] => test@test.test [1] => testpass [2] =>)

Array ([0] => SELECT hosts.Email, hosts.LName, hosts.FName, hosts.ID FROM hosts WHERE >Email = [1] => AND Password = [2] => ; )

SELECT hosts.Email, hosts.LName, hosts.FName, hosts.ID FROM hosts WHERE Email = AND Password = ;test@test.testtestpassblank line

错误:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 'AND Password = ;test@test.testtestpass' 附近使用正确的语法

我需要帮助的行是

foreach (array_merge($ArrSql, $input) as $SqlArray) {//合并数组构建字符串

我希望输出像

$a[0] $b[0] $a[1] $b[1] $a[2] $b[2]...

但我得到的是

$a[0] $a[1] $a[2] $b[0] $b[1] $b[2]...

好的,这是我的代码碰撞,可能会有所帮助。

感谢您的宝贵时间, 山姆

public function ReturnData($Sql, $BindVars) {
    $BindVars[] = '';// needed for pading
    $FilledSql = '';

    $mysqli = DataBase::ConDataBase();
    $ArrSql = explode("?", $Sql);  //splitting the code on '?' so that it can dynamically add the values

    foreach ($BindVars as $value) {
        $input[] = $mysqli->real_escape_string($value);// cleaning the input
    }

    print_r($input);echo "<br>";//testting to see if data is filled
    print_r($ArrSql);echo "<br>". "<br>";//testting to see if array was filled correctly

    foreach ( array_merge( $ArrSql, $input) as $SqlArray) {//merge arrays to build string

        $FilledSql .= $SqlArray; //anding combind strings from the arrays
    }
    echo($FilledSql); Echo  "blank line" . "<br>". "<br>";//
    return $FilledSql;
}

【问题讨论】:

  • 我不确定你想要达到什么目的。您是否尝试将每个数组元素打印两次? SQL 错误与此有什么关系?
  • @AmalMurali 我想像这样合并两个数组`$a[0] $b[0] $a[1] $b[1] $a[2] $b[2]。 ..`但我得到的是$a[0] $a[1] $a[2] $b[0] $b[1] $b[2]...
  • 您的 SQL 错误是一个SQL injection attack 漏洞。
  • @WhiteShadow:嗯,这正是你在问题中写的。
  • 不,这是因为您正在构建不正确的查询。无论您对数组合并问题做什么都不会修复 sql 错误。你有 mysql_real_escape_string() 在那里,但你的 testtest 值仍然没有被引用。 m_r_e_s 不会将 '-quotes 添加到字符串中。它的唯一功能是在字符串中转义 sql 元字符。

标签: php mysql sql arrays


【解决方案1】:

您可以使用已经实现的 foreach,但方式不同。首先,我假设您将始终为每个数组拥有正确数量的数据(例如,您的数组具有相同数量的键)。

你可以这样做:

$resultSql = '';
foreach ( $ArrSql as $key => $sqlString ) {
    $resultSql .= $sqlString . ( ( isset ( $input[$key] ) ) ? $input[$key] : '' );
}

这将产生您需要的字符串。它可能很简单,但只要您始终使用具有相同数量的键的数组,它就应该可以工作。

【讨论】:

  • 我想说声谢谢。有用。你能解释一下这部分吗,我想了解我使用的代码。 ` ( ( isset ( $input[$key] ) ) ? $input[$key] : '' ) `
  • 当然,这只是一个验证,只是一个故障保险,以防 $input 数组中不存在该键,这是一个示例:假设您有一个带有键 1,2 的 $sql 数组,3 和 4 以及带有键 1,2 和 3 的 $input 数组,当您到达键 4 时,它会返回错误,因为 $input[4] 不存在。
  • 而 ' ' ,如果 $input[] 数组中没有该指针处的数据,它使用的是什么?
  • 对不起,我没有提到,一切都是“if”语句,这是一个简单的解释(条件)? result if true : result if false - 所以是的,这是该键不存在的结果。
  • 哦,这是有道理的,我只是没有看到没有'If'的If。它与我所看到的不同,感谢您的新想法。
最近更新 更多