我如何从函数内部的foreach循环中的数组返回值

时间:2017-10-16 22:12:36

标签: php arrays json

美好的一天人们,我的问题是这个,我有一个json格式文件,我用这个json文件中的php json_decode()解码它我想迭代它并存储所有我将在函数末尾返回的变量中的定义元素。我试过了

function dictSearch(){
        $file = file_get_contents('wiki.json');
        $input = json_decode($file);
        $ans = '';
        $error = 'No definition for that word';
        foreach ($input->results as $result){
            foreach ($result as $value=>$key){
                if ($value === 'definition'){
                    $answer[] = $key.'\n';
                }
            }
        }
        return print $answer;
    }

但它没有工作。 看一下json文件。

{
  "word": "rat",
  "results": [
    {
      "definition": "someone who works (or provides workers) during a strike",
      "partOfSpeech": "noun",
      "synonyms": [
        "blackleg",
        "scab",
        "strikebreaker"
      ],
      "typeOf": [
        "worker"
      ]
    },
    {
      "definition": "a person who is deemed to be despicable or contemptible",
      "partOfSpeech": "noun",
      "synonyms": [
        "bum",
        "crumb",
        "dirty dog",
        "git",
        "lowlife",
        "puke",
        "rotter",
        "scum bag",
        "skunk",
        "so-and-so",
        "stinker",
        "stinkpot"
      ],
      "typeOf": [
        "unpleasant person",
        "disagreeable person"
      ],
      "examples": [
        "kill the rat"
      ]
    },
    {
      "definition": "take the place of work of someone on strike",
      "partOfSpeech": "verb",
      "synonyms": [
        "blackleg",
        "fink",
        "scab"
      ],
      "typeOf": [
        "do work",
        "work"
      ],
      "derivation": [
        "ratter"
      ]
    },
    {
      "definition": "give away information about somebody",
      "partOfSpeech": "verb",
      "synonyms": [
        "betray",
        "denounce",
        "give away",
        "grass",
        "shit",
        "shop",
        "snitch",
        "stag",
        "tell on"
      ],
      "typeOf": [
        "inform"
      ],
      "hasTypes": [
        "sell someone out"
      ],
      "derivation": [
        "ratting",
        "ratter"
      ]
    },
    {
      "definition": "one who reveals confidential information in return for money",
      "partOfSpeech": "noun",
      "synonyms": [
        "betrayer",
        "blabber",
        "informer",
        "squealer"
      ],
      "typeOf": [
        "source",
        "informant"
      ],
      "hasTypes": [
        "nark",
        "grass",
        "fink",
        "copper's nark",
        "canary",
        "sneak",
        "sneaker",
        "snitch",
        "snitcher",
        "stool pigeon",
        "stoolie",
        "stoolpigeon",
        "supergrass"
      ]
    },
    {
      "definition": "any of various long-tailed rodents similar to but larger than a mouse",
      "partOfSpeech": "noun",
      "typeOf": [
        "rodent",
        "gnawer"
      ],
      "hasTypes": [
        "oryzomys palustris",
        "mole rat",
        "norway rat",
        "brown rat",
        "rice rat",
        "rattus rattus",
        "rattus norvegicus",
        "roof rat",
        "bandicoot rat",
        "black rat",
        "pocket rat",
        "jerboa rat"
      ],
      "derivation": [
        "ratty"
      ]
    },
    {
      "definition": "a pad (usually made of hair) worn as part of a woman's coiffure",
      "partOfSpeech": "noun",
      "typeOf": [
        "pad"
      ],
      "partOf": [
        "hairdo",
        "coif",
        "coiffure",
        "hair style",
        "hairstyle"
      ]
    },
    {
      "definition": "catch rats, especially with dogs",
      "partOfSpeech": "verb",
      "typeOf": [
        "capture",
        "catch"
      ],
      "derivation": [
        "ratter"
      ]
    },
    {
      "definition": "desert one's party or group of friends, for example, for one's personal advantage",
      "partOfSpeech": "verb",
      "typeOf": [
        "desert",
        "defect"
      ],
      "derivation": [
        "ratter"
      ]
    },
    {
      "definition": "employ scabs or strike breakers in",
      "partOfSpeech": "verb",
      "inCategory": [
        "manufacture",
        "industry"
      ],
      "typeOf": [
        "hire",
        "engage",
        "employ"
      ],
      "derivation": [
        "ratter"
      ]
    },
    {
      "definition": "give (hair) the appearance of being fuller by using a rat",
      "partOfSpeech": "verb",
      "typeOf": [
        "fill out",
        "pad"
      ]
    }
  ],
  "syllables": {
    "count": 1,
    "list": [
      "rat"
    ]
  },
  "pronunciation": {
    "all": "ræt"
  },
  "frequency": 4.49
}

我想要做的是遍历json文件并将 definition 的所有值存储在一个变量中,我可以从我的函数中返回

1 个答案:

答案 0 :(得分:1)

您可能会发现array_column非常方便。它将返回一个包含特定"列的值的数组" (即阵列的元素)

function dictSearch(){
    $file = file_get_contents('wiki.json');
    $input = json_decode($file, 1); // force array
    return array_column($file['results'], 'definition');
}

你会得到(online sandbox):

array(11) {
  [0]=>
  string(55) "someone who works (or provides workers) during a strike"
  [1]=>
  string(55) "a person who is deemed to be despicable or contemptible"
  [2]=>
  string(43) "take the place of work of someone on strike"
  [3]=>
  string(36) "give away information about somebody"
  [4]=>
  string(60) "one who reveals confidential information in return for money"
  [5]=>
  string(69) "any of various long-tailed rodents similar to but larger than a mouse"
  [6]=>
  string(63) "a pad (usually made of hair) worn as part of a woman's coiffure"
  [7]=>
  string(32) "catch rats, especially with dogs"
  [8]=>
  string(81) "desert one's party or group of friends, for example, for one's personal advantage"
  [9]=>
  string(34) "employ scabs or strike breakers in"
  [10]=>
  string(57) "give (hair) the appearance of being fuller by using a rat"
}