3
votes

Renvoyer des éléments d'un tableau imbriqué en fonction de critères

J'essaye de rechercher un tableau pour un élément (dans ce cas «électronique»), puis de renvoyer la valeur imbriquée.

Le tableau avec lequel je travaille

$this->issn = "2339-1623"

Voici le code que j'utilise.

<?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);
}

Le sortie que j'attends

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


2 commentaires

Pouvez-vous montrer le code que vous avez et un exemple de la sortie que vous attendez?


Veuillez ajouter ceci à votre question plutôt que de le mettre dans les commentaires :)


4 Réponses :


0
votes

Vous pouvez utiliser une simple boucle foreach qui ajoute des éléments correspondants à un tableau de résultats

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

ou vous pouvez sortir de la boucle lorsque vous rencontrez le premier élément d'un type donné

XXX


0 commentaires

6
votes

Vous pouvez utiliser la collection laravel:

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

Et le résultat est:

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


3 commentaires

Vous pouvez en savoir plus sur la collection Laravel ici


@ user5067291 Peut-être avez-vous besoin de get () au lieu de first () ? Précisez s'il vous plaît.


Si vous avez besoin de plusieurs objets de collection, utilisez get (). Mais si vous voulez obtenir un seul objet de la collection, utilisez first ().



-1
votes

Vous devez utiliser la boucle foreach

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


0 commentaires

0
votes

Manière PHP:

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

//var_dump($filteredArray);

Documents .


0 commentaires