根据条件从数组嵌套返回元素



我正在尝试在数组中搜索元素(在本例中为"电子"(,然后返回嵌套值。

我正在使用的阵列

array:2 [▼
  0 => array:2 [▼
    "value" => "0241-6230"
    "type" => "print"
  ]
  1 => array:2 [▼
    "value" => "2339-1623"
    "type" => "electronic"
  ]
]

下面是我正在使用的代码。

<?php
$this->doi = 'anydoinumber';
$this->client = new Client();
$this->Url = 'https://api.crossref.org/works/:'.$this->doi;
$res = $this->client->get($this->Url);
$decoded_items = json_decode($res->getBody(), true);
if (isset($decoded_items['message']['issn-type'])) {
    $this->issn = '';
} else {
    // no electronic ISSN given
    Log.Alert('No electronic ISSN for :'.$this->Doi);
}

我期待的输出

$this->issn = "2339-1623"

您可以使用 laravel collection:

collect($array)->where('type', 'electronic')->first();

输出为:

array:2 [
  "value" => "2339-1623"
  "type" => "electronic"
]

您可以使用一个简单的 foreach 循环,将匹配的元素添加到结果数组中

$filtered = [];
foreach($myarr as $i){
    if($i['type'] == 'searched type')
        $filtered[] = $i;
}

或者,当您遇到给定类型的第一个元素时,您可以中断循环

foreach($myarr as $i){
    if($i['type'] == 'searched type')
        return $i; // or $found = $i and then break;
}

PHP 方式:

$searchingFor = 'electronic';
$filteredArray = array_filter($initialArray, function($v, $k) use ($searchingFor) {
    return $searchingFor === $v['type'];
}, ARRAY_FILTER_USE_BOTH);
//var_dump($filteredArray);

文档。

你必须 用户foreach循环

$searchterm = 'electronics';
foreach($nested as $key => $value) {
  if($value['type'] == $searchterm) {
    return $value['value'];
    break;
  }
}

最新更新