2017-04-13 66 views
0

的一些成员我在寻找丢失了所有的数组键在数组[“结果”]其中只有一些阵列成员有钥匙“taxonomicStatus”PHP,获得当钥匙从阵列

有是该阵列的15个成员:

http://api.gbif.org/v1/species?name=Micromussa%20amakusensis

当我搜索它返回一个列表中的阵列,其中那些与键“taxonomicStatus”

$taxonomicStatus_search = array_column($taxon['results'], 'taxonomicStatus'); 

Array 
(
[0] => HOMOTYPIC_SYNONYM 
[1] => ACCEPTED 
[2] => SYNONYM 
[3] => ACCEPTED 
[4] => ACCEPTED 
[5] => ACCEPTED 
) 

预期输出:

Array 
(
[0] => HOMOTYPIC_SYNONYM 
[1] => 
[2] => 
[3] => 
[4] => 
[5] => 
[6] => 
[7] => 
[8] => 
[9] => ACCEPTED 
[10] => SYNONYM 
[11] => ACCEPTED 
[12] => ACCEPTED 
[13] => 
[14] => ACCEPTED 
) 

我想设置返回第一个键=>在这种情况下,9

回答

2

这里接受,您应该使用foreach循环,而不是array_column

PHP code demo

<?php 
ini_set('display_errors', 1); 
$json='{"offset":0,"limit":20,"endOfRecords":true,"results":[{"key":4880483,"nubKey":4880483,"nameKey":7024762,"taxonID":"gbif:4880483","sourceTaxonKey":106044866,"kingdom":"Animalia","phylum":"Cnidaria","order":"Scleractinia","family":"Mussidae","genus":"Acanthastrea","species":"Acanthastrea amakusensis","kingdomKey":1,"phylumKey":43,"classKey":206,"orderKey":714,"familyKey":7002,"genusKey":2260342,"speciesKey":2260347,"datasetKey":"d7dddbf4-2cf0-4f39-9b2a-bb099caae36c","constituentKey":"2d59e5db-57ad-41ff-97d6-11f5fb264527","parentKey":2260342,"parent":"Acanthastrea","acceptedKey":2260347,"accepted":"Acanthastrea amakusensis Veron, 1990","basionymKey":2260347,"basionym":"Acanthastrea amakusensis Veron, 1990","scientificName":"Micromussa amakusensis (Veron, 1990)","canonicalName":"Micromussa amakusensis","authorship":" (Veron, 1990)","nameType":"SCIENTIFIC","rank":"SPECIES","origin":"SOURCE","taxonomicStatus":"HOMOTYPIC_SYNONYM","nomenclaturalStatus":[],"remarks":"Originally found in sources as accepted taxon within Micromussa Veron, 2000","publishedIn":"Veron, J. (1990). New Scleractinia from Japan and other Indo-West Pacific Countries. <em>Galaxea.</em> 9: 95-173.","numDescendants":0,"lastCrawled":"2017-02-14T13:42:21.926+0000","lastInterpreted":"2017-02-14T13:00:20.059+0000","issues":["ORIGINAL_NAME_DERIVED","CONFLICTING_BASIONYM_COMBINATION"],"synonym":true,"class":"Anthozoa"},{"key":100173150,"nubKey":4880483,"nameKey":7024754,"taxonID":"9ab7c4e2-4e69-40ed-a128-e684ae550128","datasetKey":"cd174407-5632-4090-ba61-9ff3fe41bc03","scientificName":"Micromussa amakusensis","canonicalName":"Micromussa amakusensis","authorship":"","nameType":"SCIENTIFIC","origin":"SOURCE","nomenclaturalStatus":[],"numDescendants":0,"lastCrawled":"2016-03-18T03:32:43.271+0000","lastInterpreted":"2016-03-18T03:33:11.104+0000","issues":[],"synonym":false},{"key":100173154,"nubKey":4880483,"nameKey":7024754,"taxonID":"12559e75-a90a-4c25-aea3-ccdb4fdb83bf","datasetKey":"cd174407-5632-4090-ba61-9ff3fe41bc03","scientificName":"Micromussa amakusensis","canonicalName":"Micromussa amakusensis","authorship":"","nameType":"SCIENTIFIC","origin":"SOURCE","nomenclaturalStatus":[],"numDescendants":0,"lastCrawled":"2016-03-18T03:32:43.271+0000","lastInterpreted":"2016-03-18T03:33:11.121+0000","issues":[],"synonym":false},{"key":100173158,"nubKey":4880483,"nameKey":7024754,"taxonID":"92ea7343-22df-4873-b4e9-40409f74b4af","datasetKey":"cd174407-5632-4090-ba61-9ff3fe41bc03","scientificName":"Micromussa amakusensis","canonicalName":"Micromussa amakusensis","authorship":"","nameType":"SCIENTIFIC","origin":"SOURCE","nomenclaturalStatus":[],"numDescendants":0,"lastCrawled":"2016-03-18T03:32:43.271+0000","lastInterpreted":"2016-03-18T03:33:11.124+0000","issues":[],"synonym":false},{"key":100173162,"nubKey":4880483,"nameKey":7024754,"taxonID":"12ee3ff9-af4c-4e8f-8081-e7d4f6e5299b","datasetKey":"cd174407-5632-4090-ba61-9ff3fe41bc03","scientificName":"Micromussa amakusensis","canonicalName":"Micromussa amakusensis","authorship":"","nameType":"SCIENTIFIC","origin":"SOURCE","nomenclaturalStatus":[],"numDescendants":0,"lastCrawled":"2016-03-18T03:32:43.271+0000","lastInterpreted":"2016-03-18T03:33:11.127+0000","issues":[],"synonym":false},{"key":100173164,"nubKey":4880483,"nameKey":7024754,"taxonID":"84c84f33-746b-44b5-8b4d-4bbda7d2c4df","datasetKey":"cd174407-5632-4090-ba61-9ff3fe41bc03","scientificName":"Micromussa amakusensis","canonicalName":"Micromussa amakusensis","authorship":"","nameType":"SCIENTIFIC","origin":"SOURCE","nomenclaturalStatus":[],"numDescendants":0,"lastCrawled":"2016-03-18T03:32:43.271+0000","lastInterpreted":"2016-03-18T03:33:11.130+0000","issues":[],"synonym":false},{"key":100173168,"nubKey":4880483,"nameKey":7024754,"taxonID":"c4d607ef-2411-42d1-a467-69c1c9f26659","datasetKey":"cd174407-5632-4090-ba61-9ff3fe41bc03","scientificName":"Micromussa amakusensis","canonicalName":"Micromussa amakusensis","authorship":"","nameType":"SCIENTIFIC","origin":"SOURCE","nomenclaturalStatus":[],"numDescendants":0,"lastCrawled":"2016-03-18T03:32:43.271+0000","lastInterpreted":"2016-03-18T03:33:11.132+0000","issues":[],"synonym":false},{"key":100173171,"nubKey":4880483,"nameKey":7024754,"taxonID":"7924f639-de7e-43e4-9432-b0d5e6dca968","datasetKey":"cd174407-5632-4090-ba61-9ff3fe41bc03","scientificName":"Micromussa amakusensis","canonicalName":"Micromussa amakusensis","authorship":"","nameType":"SCIENTIFIC","origin":"SOURCE","nomenclaturalStatus":[],"numDescendants":0,"lastCrawled":"2016-03-18T03:32:43.271+0000","lastInterpreted":"2016-03-18T03:33:11.135+0000","issues":[],"synonym":false},{"key":100173175,"nubKey":4880483,"nameKey":7024754,"taxonID":"32d56d2e-f30c-48f6-a026-872cbe079b09","datasetKey":"cd174407-5632-4090-ba61-9ff3fe41bc03","scientificName":"Micromussa amakusensis","canonicalName":"Micromussa amakusensis","authorship":"","nameType":"SCIENTIFIC","origin":"SOURCE","nomenclaturalStatus":[],"numDescendants":0,"lastCrawled":"2016-03-18T03:32:43.271+0000","lastInterpreted":"2016-03-18T03:33:11.138+0000","issues":[],"synonym":false},{"key":103844245,"nubKey":4880483,"nameKey":7024754,"taxonID":"541204","kingdom":"Metazoa","phylum":"Cnidaria","order":"Scleractinia","family":"Lobophylliidae","genus":"Micromussa","species":"Micromussa amakusensis","kingdomKey":103832354,"phylumKey":103840581,"classKey":103840587,"orderKey":103842303,"familyKey":103844141,"genusKey":103844241,"speciesKey":103844245,"datasetKey":"fab88965-e69d-4491-a04d-e3198b626e52","parentKey":103844241,"parent":"Micromussa","scientificName":"Micromussa amakusensis","canonicalName":"Micromussa amakusensis","authorship":"","nameType":"SCIENTIFIC","rank":"SPECIES","origin":"SOURCE","taxonomicStatus":"ACCEPTED","nomenclaturalStatus":[],"numDescendants":0,"lastCrawled":"2017-04-05T12:35:20.730+0000","lastInterpreted":"2017-04-05T16:19:21.040+0000","issues":[],"synonym":false,"class":"Anthozoa"},{"key":104437493,"nubKey":4880483,"nameKey":7024762,"taxonID":"e275620","kingdom":"Metazoa","phylum":"Cnidaria","order":"Scleractinia","family":"Lobophylliidae","genus":"Micromussa","species":"Micromussa amakusensis","kingdomKey":103832354,"phylumKey":103840581,"classKey":103840587,"orderKey":103842303,"familyKey":103844141,"genusKey":103844241,"speciesKey":103844245,"datasetKey":"fab88965-e69d-4491-a04d-e3198b626e52","parentKey":103844241,"parent":"Micromussa","acceptedKey":103844245,"accepted":"Micromussa amakusensis","scientificName":"Micromussa amakusensis (Veron, 1990)","canonicalName":"Micromussa amakusensis","authorship":" (Veron, 1990)","nameType":"SCIENTIFIC","origin":"SOURCE","taxonomicStatus":"SYNONYM","nomenclaturalStatus":[],"numDescendants":0,"lastCrawled":"2017-04-05T12:35:20.730+0000","lastInterpreted":"2017-04-05T16:19:21.076+0000","issues":[],"synonym":true,"class":"Anthozoa"},{"key":106044866,"nubKey":4880483,"nameKey":7024762,"taxonID":"578144","kingdom":"Animalia","phylum":"Cnidaria","order":"Scleractinia","family":"Lobophylliidae","genus":"Micromussa","species":"Micromussa amakusensis","kingdomKey":105759303,"phylumKey":106038449,"classKey":106038458,"orderKey":106041523,"familyKey":106044737,"genusKey":106044865,"speciesKey":106044866,"datasetKey":"2d59e5db-57ad-41ff-97d6-11f5fb264527","parentKey":106044865,"parent":"Micromussa","scientificName":"Micromussa amakusensis (Veron, 1990)","canonicalName":"Micromussa amakusensis","authorship":" (Veron, 1990)","nameType":"SCIENTIFIC","rank":"SPECIES","origin":"SOURCE","taxonomicStatus":"ACCEPTED","nomenclaturalStatus":[],"publishedIn":"Veron, J. (1990). New Scleractinia from Japan and other Indo-West Pacific Countries. <em>Galaxea.</em> 9: 95-173.","numDescendants":0,"references":"http://www.marinespecies.org/aphia.php?p=taxdetails&id=578144","lastCrawled":"2017-04-05T12:35:47.557+0000","lastInterpreted":"2017-04-05T23:33:39.530+0000","issues":["SCIENTIFIC_NAME_ASSEMBLED","CLASSIFICATION_NOT_APPLIED"],"synonym":false,"class":"Anthozoa"},{"key":107964469,"nubKey":4880483,"nameKey":7024762,"taxonID":"11137807","kingdom":"Animalia","phylum":"Cnidaria","order":"Scleractinia","family":"Mussidae","genus":"Micromussa","species":"Micromussa amakusensis","kingdomKey":106350111,"phylumKey":107950494,"classKey":107950495,"orderKey":107961048,"familyKey":107964371,"genusKey":107964468,"speciesKey":107964469,"datasetKey":"0938172b-2086-439c-a1dd-c21cb0109ed5","parentKey":107964468,"parent":"Micromussa","scientificName":"Micromussa amakusensis (Veron, 1990)","canonicalName":"Micromussa amakusensis","authorship":" (Veron, 1990)","nameType":"SCIENTIFIC","rank":"SPECIES","origin":"SOURCE","taxonomicStatus":"ACCEPTED","nomenclaturalStatus":[],"accordingTo":"CAAB (Jul 2007)","numDescendants":0,"lastCrawled":"2016-07-28T00:58:37.055+0000","lastInterpreted":"2016-05-02T18:57:57.778+0000","issues":[],"synonym":false,"class":"Anthozoa"},{"key":114325584,"nubKey":4880483,"nameKey":7024762,"taxonID":"cbce9f16-454e-4bd3-9b67-be3c724d3a31","phylum":"Cnidaria","order":"Scleractinia","family":"Lobophylliidae","genus":"Micromussa","species":"Micromussa amakusensis","phylumKey":114319504,"classKey":114319514,"orderKey":114322547,"familyKey":114325449,"genusKey":114325583,"speciesKey":114325584,"datasetKey":"a5358a8d-9b1a-43a3-b769-50d3e6ef8bd9","parentKey":114325583,"parent":"Micromussa","scientificName":"Micromussa amakusensis (Veron, 1990)","canonicalName":"Micromussa amakusensis","authorship":" (Veron, 1990)","nameType":"SCIENTIFIC","rank":"SPECIES","origin":"SOURCE","nomenclaturalStatus":[],"numDescendants":0,"lastCrawled":"2017-02-15T20:02:28.156+0000","lastInterpreted":"2016-01-18T23:13:36.578+0000","issues":["SCIENTIFIC_NAME_ASSEMBLED"],"synonym":false,"class":"Anthozoa"},{"key":121496079,"nubKey":4880483,"nameKey":7024760,"taxonID":"160121","kingdom":"Animalia","order":"Scleractinia","family":"Mussidae","genus":"Micromussa","species":"Micromussa amakusensis","kingdomKey":121280070,"classKey":121477750,"orderKey":121483436,"familyKey":121495529,"genusKey":121496073,"speciesKey":121496079,"datasetKey":"c33ce2f2-c3cc-43a5-a380-fe4526d63650","parentKey":121496073,"parent":"Micromussa","scientificName":"Micromussa amakusensis (Veron 1990)","canonicalName":"Micromussa amakusensis","authorship":" (Veron, 1990)","nameType":"SCIENTIFIC","rank":"SPECIES","origin":"SOURCE","taxonomicStatus":"ACCEPTED","nomenclaturalStatus":[],"accordingTo":"J.E.N. Veron. 2000. Corals of the World","numDescendants":0,"lastCrawled":"2016-11-23T11:10:22.160+0000","lastInterpreted":"2016-11-23T11:25:41.551+0000","issues":["SCIENTIFIC_NAME_ASSEMBLED"],"synonym":false,"class":"Anthozoa"}]}'; 
$array= json_decode($json,true); 

foreach($array["results"] as $result) 
{ 
    $data[]=isset($result["taxonomicStatus"]) ? $result["taxonomicStatus"] : false; 
} 
print_r($data); 

解决方案2:

array_map(function($result) use (&$data){ 
    $data[]=isset($result["taxonomicStatus"]) ? $result["taxonomicStatus"] : false; 
}, $array["results"]); 
print_r($data); 

输出:

Array 
(
    [0] => HOMOTYPIC_SYNONYM 
    [1] => 
    [2] => 
    [3] => 
    [4] => 
    [5] => 
    [6] => 
    [7] => 
    [8] => 
    [9] => ACCEPTED 
    [10] => SYNONYM 
    [11] => ACCEPTED 
    [12] => ACCEPTED 
    [13] => 
    [14] => ACCEPTED 
) 
+0

非常感谢。我会尝试这个和array_map并检查速度。 –

+0

@AndrewRhyne好吧没有问题提到这个http://stackoverflow.com/questions/25481714/php-is-array-map-faster-than-foreach –

+0

@AndrewRhyne我已经用'foreach'和'array_map '你可以挑选你想要的任何人。但我建议去与foreach参考这个https://eval.in/776171 –

0

我会使用阵列的地图为这个特定的问题。

有两种方法。明确定义函数或匿名函数。我会做这两个,使用你觉得容易的任何一个。

function taxonomicStatusMap ($item) { 
    return empty($item['taxonomicStatus']) ? null : $item['taxonomicStatus']; 
} 
$statusArray = array_map("taxonomicStatusMap", $taxon['results']); 

DEMO 1

或第二个选项,

$statusArray = array_map(function ($item) { 
    return empty($item['taxonomicStatus']) ? null : $item['taxonomicStatus']; 
}, $taxon['results']); 

DEMO 2

在这两种情况下的$statusArray将返回正是你需要的。

我个人喜欢使用第二个,如果它只是要执行一次,如果它要在我的代码中的多个地方使用,那么我使用第一种方法。

希望这会有所帮助。

+0

完美的作品。 –

+0

很高兴帮助。如果你将它标记为正确的答案,我将不胜感激......快乐编码。 – TipuZaynSultan