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

时间:2015-07-15 21:04:02

标签: php explode strpos

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

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

有了这个,我现在需要将所有7,200条记录重新插入到数据库中,因为已经在存储过程中修复了该问题。

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

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

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

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

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

我首先在逗号上用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>";

1 个答案:

答案 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