簡體   English   中英

如何在 PHP 的數組中搜索字符串?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM