[英]How to search for string in array in PHP?
所以我得到了这个大的 xml,可以在这里找到,我将其存储在我的数据库中作为settype-setId-partId
,我想过滤未知字符串并替换它们。这是我尝试过的:
<?php
try {
$conn = new PDO("mysql:host=localhost;dbname=db", "root", "");
// set the PDO error mode to exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $e)
{
echo "Connection failed: " . $e->getMessage();
}
$figuredata = simplexml_load_file("figuredata.xml");
$users = $conn->prepare("SELECT figure, username from players");
$users->execute();
$users = $users->fetchAll(PDO::FETCH_OBJ);
foreach($figuredata->sets->settype as $settype) {
foreach($settype->set as $set) {
foreach($set->part as $part) {
foreach($users as $user ) {
$lookArr = explode(".",$user->figure);
foreach($lookArr as $look ){
$lookArrNew = explode("-", $look);
if($lookArrNew[1] != $set->attributes()->id && $lookArrNew[2] != $part->attributes()->id) {
echo "fail";
}
}
}
}
}
}
但它为每个字符串返回失败。 我应该怎么办?
如果您使用 XPath 来搜索数据而不是使用所有各种循环,则可以将代码减少为读取播放器,然后搜索条目。
这使用了 XPath 表达式//set[@id="'.$lookArr[1].'"]/part[@id="'.$lookArr[2].'"]
,它将寻找类似//set[@id="3774"]/part[@id="3329"]
。 这是一个<set>
值,其属性值为 id = 3774,其中一个<part>
的 id 属性为 3329。
xpath()
返回一个列表,因此如果它为空,则找不到该值。
$users = $users->fetchAll(PDO::FETCH_OBJ);
foreach($users as $user ) {
$lookArr = explode(".",$user->figure);
foreach($lookArr as $look ){
$lookArr = explode("-",$figure);
$set = $figuredata->xpath('//set[@id="'.$lookArr[1].'"]/part[@id="'.$lookArr[2].'"]');
if ( empty($set) ) {
echo "fail";
}
else {
echo $set[0]->asXML();
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.