所以,简而言之,我遇到了一个问题,我遇到的问题是某些代码中的错误会导致记录无法插入到数据库中,即使UI告诉它已提交(我的部分是愚蠢的检查)。
我们做的一件事是记录数据库返回的所有错误,这样我们就可以看到没有插入记录的原因以及原因。
有了这个,我现在需要将所有7,200条记录重新插入到数据库中,因为已经在存储过程中修复了该问题。
这就是我们存储发送的参数的方式:
xml=<data><optional><Account>1551573750449311384</Account></optional></data>, submitter=Q10004370, target=Q10224247, escalationType=aal, escalationReason=253, feedback= , preventable=1
我将在错误日志中循环遍历所有这些数据,并尝试准备所有数据以重新插入表中。我的问题是,字符串可能包含更少或更多的数据;它充满活力。
我需要一种可以搜索字符串特定部分的方法,例如xml
或target
。
这将允许我使用需要重新插入的字段设置所有数据。
我首先在逗号上用PHP explode
开始,但意识到事情永远不会在同一个顺序中。然后我打算尝试使用strpos
来获得该位置,然后获得该值但却无法这样做。
如何获取值(在= sign
之前且在逗号之前的部分?
End Result是能够从这个字符串中获取我需要的每个变量,所以我可以将它们传递给insert语句,将它们放回数据库中。
更新:虽然这项工作正常,但我现在的问题是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>";
答案 0 :(得分:1)
也许是这样的?
$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>";
直播链接:http://sandbox.onlinephpfunctions.com/code/37aa046be2e9df37eff015ad292cd8a794a82782