数组子集php

时间:2010-12-17 08:49:21

标签: php arrays multidimensional-array simplexml

我需要从这个simplexmlobject开始:

SimpleXMLElement Object
(
    [PubmedArticle] => Array
        (
            [0] => SimpleXMLElement Object
                (
                    [MedlineCitation] => SimpleXMLElement Object
                        (
                            [@attributes] => Array
                                (
                                    [Owner] => NLM
                                    [Status] => In-Process
                                )

                            [PMID] => 20538400
                            [DateCreated] => SimpleXMLElement Object
                                (
                                    [Year] => 2010
                                    [Month] => 07
                                    [Day] => 08
                                )

                            [Article] => SimpleXMLElement Object
                                (
                                    [@attributes] => Array
                                        (
                                            [PubModel] => Print-Electronic
                                        )

                                    [Journal] => SimpleXMLElement Object
                                        (
                                            [ISSN] => 1090-2147
                                            [JournalIssue] => SimpleXMLElement Object
                                                (
                                                    [@attributes] => Array
                                                        (
                                                            [CitedMedium] => Internet
                                                        )

                                                    [Volume] => 73
                                                    [Issue] => 3
                                                    [PubDate] => SimpleXMLElement Object
                                                        (
                                                            [Year] => 2010
                                                            [Month] => Aug
                                                        )

                                                )

                                            [Title] => Brain and cognition
                                            [ISOAbbreviation] => Brain Cogn
                                        )

                                    [ArticleTitle] => Increased saccadic rate during smooth pursuit eye movements in patients at Ultra High Risk for developing a psychosis.
                                    [Pagination] => SimpleXMLElement Object
                                        (
                                            [MedlinePgn] => 215-21
                                        )

                                    [Abstract] => SimpleXMLElement Object
                                        (
                                            [AbstractText] => Abnormalities in eye tracking are consistently observed in schizophrenia patients and their relatives and have been proposed as an endophenotype of the disease. The aim of this study was to investigate the performance of patients at Ultra High Risk (UHR) for developing psychosis on a task of smooth pursuit eye movement (SPEM). Forty-six UHR patients and twenty-eight age and education matched controls were assessed with a task of SPEM and psychiatric questionnaires. Our results showed that both the corrective and non-corrective saccadic rates during pursuit were higher in the UHR group. There were however no differences in smooth pursuit gain between the two groups. The saccadic rate was related to positive UHR symptoms. Our findings indicate that abnormalities in SPEM are already present in UHR patients, prior to a first psychotic episode. These abnormalities occur only in the saccadic system.
                                            [CopyrightInformation] => 2010 Elsevier Inc. All rights reserved.
                                        )

                                    [Affiliation] => Department of Psychiatry, Academic Medical Center, University of Amsterdam, The Netherlands. m.j.vantricht@amc.uva.nl
                                    [AuthorList] => SimpleXMLElement Object
                                        (
                                            [@attributes] => Array
                                                (
                                                    [CompleteYN] => Y
                                                )

                                            [Author] => Array
                                                (
                                                    [0] => SimpleXMLElement Object
                                                        (
                                                            [@attributes] => Array
                                                                (
                                                                    [ValidYN] => Y
                                                                )

                                                            [LastName] => van Tricht
                                                            [ForeName] => M J
                                                            [Initials] => MJ
                                                        )

                                                    [1] => SimpleXMLElement Object
                                                        (
                                                            [@attributes] => Array
                                                                (
                                                                    [ValidYN] => Y
                                                                )

                                                            [LastName] => Nieman
                                                            [ForeName] => D H
                                                            [Initials] => DH
                                                        )

                                                    [2] => SimpleXMLElement Object
                                                        (
                                                            [@attributes] => Array
                                                                (
                                                                    [ValidYN] => Y
                                                                )

                                                            [LastName] => Bour
                                                            [ForeName] => L J
                                                            [Initials] => LJ
                                                        )

                                                    [3] => SimpleXMLElement Object
                                                        (
                                                            [@attributes] => Array
                                                                (
                                                                    [ValidYN] => Y
                                                                )

                                                            [LastName] => Boerée
                                                            [ForeName] => T
                                                            [Initials] => T
                                                        )

                                                    [4] => SimpleXMLElement Object
                                                        (
                                                            [@attributes] => Array
                                                                (
                                                                    [ValidYN] => Y
                                                                )

                                                            [LastName] => Koelman
                                                            [ForeName] => J H T M
                                                            [Initials] => JH
                                                        )

                                                    [5] => SimpleXMLElement Object
                                                        (
                                                            [@attributes] => Array
                                                                (
                                                                    [ValidYN] => Y
                                                                )

                                                            [LastName] => de Haan
                                                            [ForeName] => L
                                                            [Initials] => L
                                                        )

                                                    [6] => SimpleXMLElement Object
                                                        (
                                                            [@attributes] => Array
                                                                (
                                                                    [ValidYN] => Y
                                                                )

                                                            [LastName] => Linszen
                                                            [ForeName] => D H
                                                            [Initials] => DH
                                                        )

                                                )

                                        )

                                    [Language] => eng
                                    [PublicationTypeList] => SimpleXMLElement Object
                                        (
                                            [PublicationType] => Journal Article
                                        )

                                    [ArticleDate] => SimpleXMLElement Object
                                        (
                                            [@attributes] => Array
                                                (
                                                    [DateType] => Electronic
                                                )

                                            [Year] => 2010
                                            [Month] => 06
                                            [Day] => 09
                                        )

                                )

                            [MedlineJournalInfo] => SimpleXMLElement Object
                                (
                                    [Country] => United States
                                    [MedlineTA] => Brain Cogn
                                    [NlmUniqueID] => 8218014
                                    [ISSNLinking] => 0278-2626
                                )

                            [CitationSubset] => IM
                        )

                    [PubmedData] => SimpleXMLElement Object
                        (
                            [History] => SimpleXMLElement Object
                                (
                                    [PubMedPubDate] => Array
                                        (
                                            [0] => SimpleXMLElement Object
                                                (
                                                    [@attributes] => Array
                                                        (
                                                            [PubStatus] => received
                                                        )

                                                    [Year] => 2009
                                                    [Month] => 10
                                                    [Day] => 26
                                                )

                                            [1] => SimpleXMLElement Object
                                                (
                                                    [@attributes] => Array
                                                        (
                                                            [PubStatus] => revised
                                                        )

                                                    [Year] => 2010
                                                    [Month] => 4
                                                    [Day] => 28
                                                )

                                            [2] => SimpleXMLElement Object
                                                (
                                                    [@attributes] => Array
                                                        (
                                                            [PubStatus] => accepted
                                                        )

                                                    [Year] => 2010
                                                    [Month] => 5
                                                    [Day] => 12
                                                )

                                            [3] => SimpleXMLElement Object
                                                (
                                                    [@attributes] => Array
                                                        (
                                                            [PubStatus] => aheadofprint
                                                        )

                                                    [Year] => 2010
                                                    [Month] => 6
                                                    [Day] => 9
                                                )

                                            [4] => SimpleXMLElement Object
                                                (
                                                    [@attributes] => Array
                                                        (
                                                            [PubStatus] => entrez
                                                        )

                                                    [Year] => 2010
                                                    [Month] => 6
                                                    [Day] => 12
                                                    [Hour] => 6
                                                    [Minute] => 0
                                                )

                                            [5] => SimpleXMLElement Object
                                                (
                                                    [@attributes] => Array
                                                        (
                                                            [PubStatus] => pubmed
                                                        )

                                                    [Year] => 2010
                                                    [Month] => 6
                                                    [Day] => 12
                                                    [Hour] => 6
                                                    [Minute] => 0
                                                )

                                            [6] => SimpleXMLElement Object
                                                (
                                                    [@attributes] => Array
                                                        (
                                                            [PubStatus] => medline
                                                        )

                                                    [Year] => 2010
                                                    [Month] => 6
                                                    [Day] => 12
                                                    [Hour] => 6
                                                    [Minute] => 0
                                                )

                                        )

                                )

                            [PublicationStatus] => ppublish
                            [ArticleIdList] => SimpleXMLElement Object
                                (
                                    [ArticleId] => Array
                                        (
                                            [0] => S0278-2626(10)00059-X
                                            [1] => 10.1016/j.bandc.2010.05.005
                                            [2] => 20538400
                                        )

                                )

                        )

                )

            [1] => SimpleXMLElement Object
                (
                    [MedlineCitation] => SimpleXMLElement Object
                        (
                            [@attributes] => Array
                                (
                                    [Owner] => NLM
                                    [Status] => MEDLINE
                                )

                            [PMID] => 19109059
                            [DateCreated] => SimpleXMLElement Object
                                (
                                    [Year] => 2009
                                    [Month] => 02
                                    [Day] => 09
                                )

                            [DateCompleted] => SimpleXMLElement Object
                                (
                                    [Year] => 2009
                                    [Month] => 04
                                    [Day] => 08
                                )

                            [Article] => SimpleXMLElement Object
                                (
                                    [@attributes] => Array
                                        (
                                            [PubModel] => Print-Electronic
                                        )

                                    [Journal] => SimpleXMLElement Object
                                        (
                                            [ISSN] => 1872-8952
                                            [JournalIssue] => SimpleXMLElement Object
                                                (
                                                    [@attributes] => Array
                                                        (
                                                            [CitedMedium] => Internet
                                                        )

                                                    [Volume] => 120
                                                    [Issue] => 2
                                                    [PubDate] => SimpleXMLElement Object
                                                        (
                                                            [Year] => 2009
                                                            [Month] => Feb
                                                        )

                                                )

                                            [Title] => Clinical neurophysiology : official journal of the International Federation of Clinical Neurophysiology
                                            [ISOAbbreviation] => Clin Neurophysiol
                                        )

                                    [ArticleTitle] => Quantification of the auditory startle reflex in children.
                                    [Pagination] => SimpleXMLElement Object
                                        (
                                            [MedlinePgn] => 424-30
                                        )

                                    [Abstract] => SimpleXMLElement Object
                                        (
                                            [AbstractText] => Array
                                                (

                                                )

                                        )


                                    [AuthorList] => SimpleXMLElement Object
                                        (
                                            [@attributes] => Array
                                                (
                                                    [CompleteYN] => Y
                                                )

                                            [Author] => Array
                                                (
                                                    [0] => SimpleXMLElement Object
                                                        (
                                                            [@attributes] => Array
                                                                (
                                                                    [ValidYN] => Y
                                                                )

                                                            [LastName] => Bakker
                                                            [ForeName] => Mirte J
                                                            [Initials] => MJ
                                                        )

                                                    [1] => SimpleXMLElement Object
                                                        (
                                                            [@attributes] => Array
                                                                (
                                                                    [ValidYN] => Y
                                                                )

                                                            [LastName] => Boer
                                                            [ForeName] => Frits
                                                            [Initials] => F
                                                        )

                                                    [2] => SimpleXMLElement Object
                                                        (
                                                            [@attributes] => Array
                                                                (
                                                                    [ValidYN] => Y
                                                                )

                                                            [LastName] => van der Meer
                                                            [ForeName] => Johan N
                                                            [Initials] => JN
                                                        )

                                                    [3] => SimpleXMLElement Object
                                                        (
                                                            [@attributes] => Array
                                                                (
                                                                    [ValidYN] => Y
                                                                )

                                                            [LastName] => Koelman
                                                            [ForeName] => Johannes H T M
                                                            [Initials] => JH
                                                        )

                                                    [4] => SimpleXMLElement Object
                                                        (
                                                            [@attributes] => Array
                                                                (
                                                                    [ValidYN] => Y
                                                                )

                                                            [LastName] => Boerée
                                                            [ForeName] => Thijs
                                                            [Initials] => T
                                                        )

                                                    [5] => SimpleXMLElement Object
                                                        (
                                                            [@attributes] => Array
                                                                (
                                                                    [ValidYN] => Y
                                                                )

                                                            [LastName] => Bour
                                                            [ForeName] => Lo
                                                            [Initials] => L
                                                        )

                                                    [6] => SimpleXMLElement Object
                                                        (
                                                            [@attributes] => Array
                                                                (
                                                                    [ValidYN] => Y
                                                                )

                                                            [LastName] => Tijssen
                                                            [ForeName] => Marina A J
                                                            [Initials] => MA

到一个看起来像这样的数组:

Lastname  (number of times)
Boerée (2)
Koelman (2)
Bour   (2)
van Tricht (1)
Nieman  (1)
de Haan (1)
Linzen  (1)
Bakker  (1)
Boer    (1)
Tijssen (1)
van der Meer (1)

问候!

我需要做的第一件事是将所有Last_names放在一个数组中,这应该用foreach循环来完成:

foreach($xml->xpath('//AuthorList') as $AuthorList) { 
    foreach ($AuthorList->Author as $Author) { 
        //$author_last_name_list = $Author->LastName; 
        //$author_last_name_list .= $author_last_name_list; 
        $author_last_name_list join array($Author->LastName); 
    } 
} 

(这不起作用)

但我如何在foreach循环中构建数组?第二,如果我有大名单,我怎么得到一个新的数组“名称在阵列中的次数”...问候!

2 个答案:

答案 0 :(得分:3)

首先,如果my answer to your previous question帮助你,那么你应该接受答案 如果我的代码不起作用,那么你应该评论我的答案并告诉我,以便我可以纠正我的答案。

其次,在循环中创建数组只是将值添加到空数组:

$authors = array();
foreach ($xml->xpath('//AuthorList') as $AuthorList) {
    foreach ($AuthorList->Author as $Author) {
        $name = (string) $Author->LastName;
        if(!array_key_exists($name, $authors)) {
            $authors[$name] = 0;
        }
        $authors[$name] += 1;
    }
}

然后循环$authors。键包含名称和出现的值。

更新: (因为这次我很高兴;))

foreach($authors as $name=>$times) {
    echo $name . "($times)" . "<br />"; // or PHP_EOL if you print it on a terminal
}

详细了解arrays in PHP


关于你的代码:即使它不起作用,也应该简短说一句:

$author_last_name_list = $Author->LastName; 
$author_last_name_list .= $author_last_name_list; 

这样,您首先将变量$author_last_name_list设置为$Author->LastName,覆盖之前$author_last_name_list中的值,然后连接。你将永远得到的是:

$author_last_name_list = "A";
$author_last_name_list .= $author_last_name_list; // => 'AA';

如果你想要在字符串中获取名称(无论如何这对你没有帮助)那么你必须在循环之前初始化变量

$author_last_name_list = '';
foreach($xml->xpath('//AuthorList') as $AuthorList) { 
    foreach ($AuthorList->Author as $Author) { 
        $author_last_name_list .= $Author->LastName; 
    } 
}

$author_last_name_list join array($Author->LastName);

是无效的PHP语法。

答案 1 :(得分:0)

这里有一些递归数组搜索函数的例子:http://php.net/manual/en/function.array-search.php。只需更改它们即可将所有找到的实例作为数组返回,而不是仅返回第一个找到的匹配项祝好运! :)

编辑(不妨为它工作......):

我相信你可以获得所有Lastname的SimpleXML,但让我们选择你拥有的东西。我认为你的意思是这样的:

$author_last_name_list = array();
foreach($xml->xpath('//AuthorList') as $AuthorList) { 
    foreach ($AuthorList->Author as $Author) { 
        // $author_last_name_list join array($Author->LastName); 
        if (array_key_exists($Author, $author_last_name_list) {
            $author_last_name_list[$Author] += 1;
        } else {
            $author_last_name_list[$Author] = 1;
        }
    } 
}