如何将字符串与数组匹配以获取值?

时间:2018-02-14 07:43:35

标签: php arrays string

我有一个具有相应值的数组。

Array
(
    [0] => BBsma=200
    [1] => SMAperiod=300
    [2] => SMA1=400
    [3] => SMA2=500
    [4] => EMAperiod=300
    [5] => EMA1=24
    [6] => EMA2=8
)

现在我想匹配某个字符串,比如BBsma,它应该返回200.任何帮助?

使用这些代码获取数组。

$txt = file_get_contents('INDICATORS.txt');
$rows = explode("\n", $txt);
array_shift($rows);

INDICATORS.txt内容

 BBperiod=100
 BBsma=200
 SMAperiod=300
 SMA1=400
 SMA2=500
 EMAperiod=300
 EMA1=24
 EMA2=8

6 个答案:

答案 0 :(得分:0)

您可以遍历数组的每一行,并通过常规匹配查找值。

<强>代码:

$txt = file_get_contents('INDICATORS.txt');
$rows = explode("\n", $txt);

/*
$rows = [
    "BBsma=200",
    "SMAperiod=300",
    "SMA1=400",
    "SMA2=500",
    "EMAperiod=300",
    "EMA1=24",
    "EMA2=8",
];
*/
foreach ($rows as $k=>$v) {
    if (preg_match("/(BBsma|SMAperiod|EMAperiod)=([0-9]+)/", $v, $matches)) {
        echo "found value " . $matches[2] . " for entry " . $matches[1] . " in line " . $k . PHP_EOL;
    }
}

<强>输出:

在第0行的条目BBsma中找到值200

在第1行中输入SMAperiod的值为300

在第4行输入EMAperiod的值为300

答案 1 :(得分:0)

将文本分解为行后,请使用以下代码:

for($i=0;$i<sizeof($rows);$i++)
{
    $temp=explode("=",$rows[$i]);
    if(sizeof($temp)==2)
    {
        $arr[$temp[0]]=$temp[1];
    }
}
  

您将在$ arr

中命名数组

如果要将第二部分转换为int,只需将6行更改为:

$arr[$temp[0]]=intval($temp[1]);

答案 2 :(得分:0)

你可以按照PHP_EOL这样的新行爆炸

$col = "BBsma";
 $val = "";
 foreach(explode(PHP_EOL,$str) as $row){
    $cols = explode("=",$row);
    if(trim($cols[0]) == $col){
       $val = $cols[1];
       break;
    }
 }
 echo "Value $col is : $val";

Live Demo

答案 3 :(得分:0)

如果您要使用该阵列几次,首先可能更容易将该文件读入关联数组...

$rows = [];
$file = "INDICATORS.txt";
$data = file($file, FILE_IGNORE_NEW_LINES);
foreach ( $data as $item )   {
    $row = explode("=", $item);
    $rows [$row[0]] = $row[1];
}
echo "EMA1 =".$rows['EMA1'];

这不是array_shift()但不确定为何使用它,但很容易重新加入。

这输出......

EMA1 =24

答案 4 :(得分:0)

我认为使用数组过滤器可以最好地回答您的问题。它返回一个状态代码为200的字符串数组。如果您希望以后能够更好地控制并对代码进行排序/搜索。我建议使用array_walk来创建某种多维数组。这两种解决方案都可行。

<?php

$arr = [
    "BBsma=200",
    "SMAperiod=300",
    "SMA1=400",
    "SMA2=500",
    "EMAperiod=300",
    "EMA1=24",
    "EMA2=8",
];

$filtered = array_filter($arr,"filter");

function filter($element) {
    return strpos($element,"=200");
}
var_dump($filtered); // Returns array with all matching =200 codes: BBSMA=200

输出:

array (size=1)
  0 => string 'BBsma=200' (length=9)

如果你想做更多的事情,我建议做这样的事情:

///////// WALK The array for better control / manipulation

$walked = [];

array_walk($arr, function($item, $key) use (&$walked) {
    list($key,$value) = explode("=", $item);
    $walked[$key] = $value;
});

var_dump($walked);

这将为您提供一个数组,其中参数为键,状态代码为其值。我最初发布了array_map但很快意识到数组漫游是一个更清洁的解决方案。

array (size=7)
  'BBsma' => string '200' (length=3)
  'SMAperiod' => string '300' (length=3)
  'SMA1' => string '400' (length=3)
  'SMA2' => string '500' (length=3)
  'EMAperiod' => string '300' (length=3)
  'EMA1' => string '24' (length=2)
  'EMA2' => string '8' (length=1)

以这种方式使用数组变得更加容易:

echo $walked['BBsma']; // 200

答案 5 :(得分:-1)

$anything = array("BBsma"=>"200", "SMAperiod"=>"300", "SMA1"=>"400");
echo "the value is " . $anything['BBsma'];

这将返回200