我有一个具有相应值的数组。
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
答案 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";
答案 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