PHP 在动态字符串中查找数据

PHP Finding Data in Dynamic String

所以,简而言之,我遇到了一个问题,即某些代码中的错误导致记录无法插入数据库,即使 UI 告诉它它已提交(愚蠢的检查我的部分)。

我们做的一件事是记录数据库返回的所有错误,这样我们就可以随时查看未插入记录的原因。

既然问题已在存储过程中得到解决,我就有了所有 7,200 条记录需要重新插入到数据库中。

这是我们存储发送的参数的方式:

xml=<data><optional><Account>1551573750449311384</Account></optional></data>, submitter=Q10004370, target=Q10224247, escalationType=aal, escalationReason=253, feedback= , preventable=1

我将遍历错误日志中的所有这些数据,并尝试准备所有数据以重新插入 table。我的问题是字符串可能包含更少或更多的数据;它是动态的。

我需要一种方法来搜索字符串的特定部分,例如 xmltarget

这将允许我使用需要重新插入的字段设置所有数据。

我首先从逗号上的 PHP 的 explode 开始,但我意识到事物的顺序永远不会相同。然后我打算尝试使用 strpos 来获取位置然后获取值但是这样做有问题。

如何获取值(= sign 之前和逗号之前的部分?

最终结果是能够从这个字符串中获取我需要的每个变量,这样我就可以将它们传递给插入语句以将它们放回数据库中。

更新:虽然这是有效的,但我现在的问题是 feedback= 部分中可能有逗号,这会导致数组出现问题。

    $array = Array();

// Loop over each one of the records we are going to be working with
foreach($data->data as $p){

    // Create an array of all the params
    $pieces = explode(", ", rtrim($p->params, ", "));

    // Debug to show all of the records we are using
    /*
    print '<pre>';
    print_r($p);
    print '</pre>';
    */

    // Loop over all the params which is defined by the = sign
    foreach($pieces as $item) {
        // Put the values of each of the results into an array
        $result[] = explode("=", trim($item));
    }

    // Loop over all of the results in the array
    foreach($result as $item) {
        // Store the param name as the key in our end result
        $end[trim($item[0])] = $item[1];
    }

    // Push the final arrays into the results array
    array_filter($end);
    array_push($array, $end);
}

// Display the end results  
print "<pre>";
print_r($array);
print "</pre>";

大概是这样的?

$str    = 'xml=<data><optional><Account>1551573750449311384</Account></optional></data>, submitter=Q10004370, target=Q10224247, escalationType=aal, escalationReason=253, feedback= , preventable=1';
$foo    = explode(",", $str);

foreach($foo as $item) {

    $result[] = explode("=", $item);

}


foreach($result as $item) {

    $end[$item[0]] = $item[1] ;

}

echo "<pre>";
print_r($end);
echo "</pre>";

直播link:http://sandbox.onlinephpfunctions.com/code/37aa046be2e9df37eff015ad292cd8a794a82782