【问题标题】:Find in multidimensional array在多维数组中查找
【发布时间】:2015-07-15 17:13:19
【问题描述】:

我有这个多维 json 数组:

Array(
[LogicTokenList] => Array
    (
        [0] => Array
            (
                [position] => 0
                [lemma] => accendi
                [generalLemma] => accendere
                [extendedPOSTag] => VER:impr+pres+2+s
                [simplifiedPOSTag] => VER
                [rearrangedTag] => VER
                [retrievedRearrangedLemma] => accendere
                [synonymProxyTag] => v.
                [schankDependency] => ATRANS
                [logicAnalysis] => 
                [isWH] => 
                [WHVariant] => 
                [hyperonym] => 
                [isFirstSubject] => 
                [isFirstObject] => 
                [substantivization] => accensione
                [synonyms] => Array
                    (
                        [0] => appiccare il fuoco
                        [1] => attizzare
                        [2] => bruciare
                        [3] => incendiare
                        [4] => infiammare
                    )
            )

        [1] => Array
            (
                [position] => 1
                [lemma] => la
                [generalLemma] => la
                [extendedPOSTag] => ART-F:s
                [simplifiedPOSTag] => ART
                [rearrangedTag] => ART
                [retrievedRearrangedLemma] => la
                [synonymProxyTag] => ART
                [schankDependency] => 0
                [logicAnalysis] => 
                [isWH] => 
                [WHVariant] => 
                [hyperonym] => 
                [isFirstSubject] => 
                [isFirstObject] => 
                [substantivization] => 
                [synonyms] => Array
                    (
                        [0] => la
                    )

            )

        [2] => Array
            (
                [position] => 2
                [lemma] => luce
                [generalLemma] => Luce
                [extendedPOSTag] => NPR
                [simplifiedPOSTag] => NPR
                [rearrangedTag] => NOU
                [retrievedRearrangedLemma] => luce
                [synonymProxyTag] => sost.
                [schankDependency] => 0
                [logicAnalysis] => COMP_OGG
                [isWH] => 
                [WHVariant] => 
                [hyperonym] => ARTEFATTO
                [isFirstSubject] => 
                [isFirstObject] => 1
                [substantivization] => 
                [synonyms] => Array
                    (
                        [0] => baleno
                        [1] => fulgore
                        [2] => lampo
                        [3] => raggio
                    )

            )

        [3] => Array
            (
                [position] => 3
                [lemma] => della
                [generalLemma] => della
                [extendedPOSTag] => ARTPRE-F:s
                [simplifiedPOSTag] => ARTPRE
                [rearrangedTag] => ARTPRE
                [retrievedRearrangedLemma] => della
                [synonymProxyTag] => ARTPRE
                [schankDependency] => 0
                [logicAnalysis] => 
                [isWH] => 
                [WHVariant] => 
                [hyperonym] => 
                [isFirstSubject] => 
                [isFirstObject] => 
                [substantivization] => 
                [synonyms] => Array
                    (
                        [0] => della
                    )

            )

        [4] => Array
            (
                [position] => 4
                [lemma] => cucina
                [generalLemma] => cucina
                [extendedPOSTag] => NOUN-F:s
                [simplifiedPOSTag] => NOU
                [rearrangedTag] => NOU
                [retrievedRearrangedLemma] => cucina
                [synonymProxyTag] => sost.
                [schankDependency] => 0
                [logicAnalysis] => COMP_SLUOGO
                [isWH] => 
                [WHVariant] => 
                [hyperonym] => EDIFICIO
                [isFirstSubject] => 
                [isFirstObject] => 
                [substantivization] => 
                [synonyms] => Array
                    (
                        [0] => arte culinaria
                        [1] => gastronomia
                    )

            )

        [5] => Array
            (
                [position] => 5
                [lemma] => alle
                [generalLemma] => alla
                [extendedPOSTag] => ARTPRE-F:p
                [simplifiedPOSTag] => ARTPRE
                [rearrangedTag] => ARTPRE
                [retrievedRearrangedLemma] => alla
                [synonymProxyTag] => ARTPRE
                [schankDependency] => 0
                [logicAnalysis] => 
                [isWH] => 
                [WHVariant] => 
                [hyperonym] => 
                [isFirstSubject] => 
                [isFirstObject] => 
                [substantivization] => 
                [synonyms] => Array
                    (
                        [0] => alla
                    )

            )

        [6] => Array
            (
                [position] => 6
                [lemma] => 20
                [generalLemma] => 20
                [extendedPOSTag] => NPR
                [simplifiedPOSTag] => NPR
                [rearrangedTag] => NPR
                [retrievedRearrangedLemma] => 20
                [synonymProxyTag] => Numero
                [schankDependency] => 0
                [logicAnalysis] => COMP_TEMPO
                [isWH] => 
                [WHVariant] => 
                [hyperonym] => 
                [isFirstSubject] => 
                [isFirstObject] => 
                [substantivization] => 
                [synonyms] => Array
                    (
                        [0] => 20
                    )

            )

    )

[ChosenWHCategory] => ARTEFATTO
[GrammarAnalysisExecutionTime] => 2531
[LogicAnalysisExecutionTime] => 459
)

我用$json = json_decode($mydata, true);解码 但是现在我需要在这个数组中搜索,例如如果我在 [simplifiedPOSTag] 中找到值“VER”,我需要打印 [retrivedRearrangedLemma]。 重要的是,这个数组的位置可能会改变。

【问题讨论】:

    标签: php arrays json multidimensional-array


    【解决方案1】:

    您可以将数组传递给递归函数

    function search_array($arr = array()) {
        if (!is_array($arr))
           return;
    
        foreach ($arr as $k => $v) {
            search_arr($v);
    
            if ($k == "simplifiedPOSTag" 
                   && strpos("VER", $v) !== false
                   && !empty($arr["retrievedRearrangedLemma"])) {
                echo $arr["retrievedRearrangedLemma"];
            }
        }
    }
    

    【讨论】:

    • 不起作用,没有结果 :( 我需要在我的数组中搜索 [simplifiedPOSTag] => VER 并打印 [retrivedRearrangedLemma] 另一个示例的值,找到 [logicAnalysis] => COMP_SLUOGO(看在位置 4) 并打印 [retrivedRearrangedLemma] 的值(在我的数组中是 cucina)
    • 这可能很愚蠢,但您确定您的 JSON 正确解码为数组吗?
    【解决方案2】:

    我不确定这是不是你需要的,试试这个:

    for($i=0; $i<sizeof($json[LogicTokenList]); $i++) {
        if($json[LogicTokenList][$i][simplifiedPOSTag]=='VER') echo $json[LogicTokenList][$i][retrievedRearrangedLemma];
    }
    

    【讨论】:

    • 不起作用,没有结果 :( 我需要在我的数组中搜索 [simplifiedPOSTag] => VER 并打印 [retrivedRearrangedLemma] 的值
    • 另一个例子,找到 [logicAnalysis] => COMP_SLUOGO(查看位置 4)并打印 [retrivedRearrangedLemma] 的值(在我的数组中是 cucina)
    • 尝试在每个“$array”之后添加“[LogicTokenList]”
    • 这样? for($i=0; $i&lt;sizeof($json[LogicTokenList]); $i++) { if($json[LogicTokenList][$i][simplifiedPOSTag]=='VER') echo $json[LogicTokenList][$i[retrievedRearrangedLemma]]; }
    • 对不起,我的脚本中数组的名称是json
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-02
    • 2014-05-11
    • 2014-12-13
    • 2013-07-06
    • 1970-01-01
    • 1970-01-01
    • 2015-10-05
    相关资源
    最近更新 更多