如何检查数组中是否存在变量?

时间:2011-05-18 23:30:29

标签: php arrays

我有一个名为data.txt的平面文件。每行包含四个条目。

data.txt中

blue||green||purple||primary
green||yellow||blue||secondary
orange||red||yellow||secondary
purple||blue||red||secondary
yellow||red||blue||primary
red||orange||purple||primary

我试着找出变量“yellow”是否作为任何一行的FIRST条目存在:

$color = 'yellow';

$a = array('data.txt');

 if (array_key_exists($color,$a)){
 // If true
   echo "$color Key exists!";
   } else {
 // If NOT true
   echo "$color Key does not exist!";
   }

但它没有按预期工作。为了实现这一目标,我可以改变什么?感谢....

5 个答案:

答案 0 :(得分:2)

以下使用preg_grep,它对数组的每个元素执行正则表达式搜索(在本例中为文件的行):

$search = 'yellow';
$file = file('file.txt');

$items = preg_grep('/^' . preg_quote($search, '/') . '\|\|/', $file);

if(count($items) > 0)
{
   // found
}

答案 1 :(得分:0)

$fh = fopen("data.txt","r");
$color = 'yellow';
$test = false;

while( ($line = fgets($fh)) !== false){
    if(strpos($line,$color) === 0){
        $test = true;
        break;
    }
}

fclose($fh);
// Check $test to see if there is a line beginning with yellow

答案 2 :(得分:0)

您文件中的数据未加载到$a。试试

$a = explode("\n", file_get_contents('data.txt'));

加载它,然后用:

检查每一行
$line_num = 1;
foreach ($a as $line) {
   $entries = explode("||", $line);
   if (array_key_exists($color, $entries)) {
      echo "$color Key exists! in line $line_num";
   } else {
      echo "$color Key does not exist!";
   }
   ++$line_num;
}

答案 3 :(得分:0)

该行:

$a = array('data.txt');

仅创建一个包含一个值的数组:'data.txt'。在检查值之前,您需要先读取并解析文件。

答案 4 :(得分:0)

嗯,这不是你如何将文本文件中的单独数据列表加载到数组中。

同样array_key_exists()只检查键,而不是数组的值。

尝试:

$lines = file('data.txt', FILE_IGNORE_NEW_LINES);

$firstEntries = array();

foreach ($lines as $cLine) {
   $firstEntries[] = array_shift(explode('||', $cLine));
}

$colour = 'yellow';

if (in_array($colour, $firstEntries)) {
   echo $colour . " exists!";
} else {
   echo $colour . " does not exist!";
}