Maison  >  Questions et réponses  >  le corps du texte

Rechercher une valeur dans un tableau multidimensionnel et renvoyer la valeur dans le même tableau

J'essaie de trouver une valeur dans un tableau de tableaux milti et après l'avoir trouvée, je veux renvoyer une clé différente, je ne sais pas comment expliquer davantage.

J'ai un tableau :

tempArray( [0] => Array
    (
        [id] => 18460
        [field_id] => 14
        [parent_id] => 165
        [custom_tab_field_id] => 17775
        [status] => 0
        [field_type] => 0
    )

[1] => Array
    (
        [id] => 18461
        [field_id] => 2
        [parent_id] => 165
        [custom_tab_field_id] => 17776
        [status] => 0
        [field_type] => 2
    )

[2] => Array
    (
        [id] => 18462
        [field_id] => 12
        [parent_id] => 165
        [custom_tab_field_id] => 17777
        [status] => 2
        [field_type] => 2
    ))

J'essaie de trouver un tableau par [custom_tab_field_id] et de renvoyer le tableau actuel [status].

J'ai créé une fonction qui est censée faire cela, mais elle renvoie toujours 0.

Caractéristiques :

function searchForStatus($id, $array){
        
        $returnedStatus = "0";
        foreach ($array as $key => $val){
            if ($val['custom_tab_field_id'] == $id){
                return $returnedStatus = $array[$key]['status'];
            }
        }
        return $returnedStatus;
    }

Ensuite, appelez simplement la fonction en passant la valeur

$returnedStatus = searchForStatus($field['custom_tab_field_id'], $tempArr);

P粉958986070P粉958986070222 Il y a quelques jours454

répondre à tous(2)je répondrai

  • P粉416996828

    P粉4169968282024-04-04 10:24:16

    peut être résolu en utilisant la fonction array-filter. C'est

    $a1 = [
        ['id' => 1, 'status', 'active'], 
        ['id' => 2, 'status', 'in-active']
    ];
    
    $search = 2;
    
    print_r(array_filter($a1, function ($object) use ($search) {
        return $object['id'] == $search;
    }));

    Il renverra l'intégralité du tableau à partir du tableau correspondant à l'identifiant 搜索.

    Vous pouvez également écrire une fonction pour cela

    function search($data, $searchValue, $searchField, $returnField) {
    
        $filter = array_filter($data, function ($object) use ($searchValue, $searchField) {
          return $object[$searchField] == $searchValue;
        });
    
       return count($filter) > 0 ? $filter[0][$returnField] : null;
    
    }

    répondre
    0
  • P粉921130067

    P粉9211300672024-04-04 09:24:48

    En utilisant la fonction array_column, cela peut être facilement résolu et très général.

    $array = [
      ['id' => 18460, 'field_id' => 14, 'parent_id' => 165, 'custom_tab_field_id' => 17775, 'status' => 0, 'field_type' => 0],
      ['id' => 18460, 'field_id' => 2, 'parent_id' => 165, 'custom_tab_field_id' => 17776, 'status' => 0, 'field_type' => 2],
      ['id' => 18460, 'field_id' => 14, 'parent_id' => 165, 'custom_tab_field_id' => 17777, 'status' => 2, 'field_type' => 2],
    ];
    
    $findKey = 'custom_tab_field_id';
    $getKey = 'status';
    $findVal = 17777;
    
    $arrKeyValue = array_column($array,$getKey,$findKey);
    
    $status = $arrKeyValue[$findVal];  //2

    Cette solution n'inclut pas la gestion des erreurs, elle montre uniquement le principe. $arrKeyValue est un tableau, que diriez-vous de :

    array (
      17775 => 0,
      17776 => 0,
      17777 => 2,
    )

    Essayez-le vous-mêmehttps://3v4l.org/SnVM4

    répondre
    0
  • Annulerrépondre