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。我的问题是字符串可能包含更少或更多的数据;它是动态的。
我需要一种方法来搜索字符串的特定部分,例如 xml
或 target
。
这将允许我使用需要重新插入的字段设置所有数据。
我首先从逗号上的 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
所以,简而言之,我遇到了一个问题,即某些代码中的错误导致记录无法插入数据库,即使 UI 告诉它它已提交(愚蠢的检查我的部分)。
我们做的一件事是记录数据库返回的所有错误,这样我们就可以随时查看未插入记录的原因。
既然问题已在存储过程中得到解决,我就有了所有 7,200 条记录需要重新插入到数据库中。
这是我们存储发送的参数的方式:
xml=<data><optional><Account>1551573750449311384</Account></optional></data>, submitter=Q10004370, target=Q10224247, escalationType=aal, escalationReason=253, feedback= , preventable=1
我将遍历错误日志中的所有这些数据,并尝试准备所有数据以重新插入 table。我的问题是字符串可能包含更少或更多的数据;它是动态的。
我需要一种方法来搜索字符串的特定部分,例如 xml
或 target
。
这将允许我使用需要重新插入的字段设置所有数据。
我首先从逗号上的 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