#php
#php
Вопрос:
у меня есть массив, содержащий значение типа
Array
(
[0] = true
[1] = OR
[2] = true
[3] = AND
[4] = false
[5] = AND
[6] = true
)
я хочу создать таблицу истинности в php, например
true OR true = result1
result1 AND false = result2
result2 AND true = result3
я тупой и пока не умею создавать. 🙁
вот мой код
foreach( $arrValue as $val )
{
if(!empty($val))
{
if($val=='true')
$p = true;
elseif($val=='false')
$p = false;
if(isset($p))
{
if(isset($result))
{
if($val=='AND')
$result = $result AND $p;
elseif($val=='OR')
$$result = $result or $p;
}
else
$result = $p;
}
}
}
пожалуйста, помогите этому глупому мальчику получить результаты.
Комментарии:
1. Я уверен, что битовые маски были бы лучшим решением для этого!
2. @saint: Вы имеете в виду en.wikipedia.org/wiki/Karnaugh_map ? Пожалуйста, уточните свой вопрос!?
3. @epitaph: en.wikipedia.org/wiki/Truth_table — Игнорируйте комментарии к битовым маскам, думал, мы говорим о чем-то другом
4. @Robert: Я не знал, что таблицу истинности можно создать с помощью двоичного кода. Помогло ли это найти условие гонки или минимальный срок? Какова святая цель создания таблицы истинности?
5. @epitaph: Я создаю процесс, который автоматически генерирует некоторые результаты и сохраняет их в db. в процессе результаты объединяются друг с другом с некоторым условием И / ИЛИ для описания наилучшего решения. я сохранил все результаты в массиве с помощью operator, как я показал в array выше. существует несколько решений. для достижения единого решения я объединил результаты и применил таблицу истинности.
Ответ №1:
вы думали о создании таблицы истинности с обратными вызовами, например:
$table = array();
$table[] = array(
'name' => 'equals',
'call' => 'check_equals'
);
$table[] = array(
'name' => 'or',
'call' => 'check_or'
);
$myData = array(
true => true,
false => true,
true => false,
true => -1,
)
foreach($myData as $first => $second)
{
foreach($table as $check)
{
echo $check['name'] . call_user_func($check['call'],$first,$second) ? 'good' : 'bad';
}
}
adn затем просто создайте свои обратные вызовы следующим образом:
function check_or($f1,$f2)
{
return $f1 || $f2;
}
function check_equals($f1,$f2)
{
return $f1 === $f2;
}
Ответ №2:
Это то, что я хочу.
//( [0] => true [1] => OR [2] => true [3] => AND [4] => false [5] => AND [6] => true)
function boolstr($val) {
if($val=='true')
return true;
elseif($val=='false')
return false;
}
function row_operator($arrValue){
$i=-2; $j=-1;
foreach( $arrValue as $val )
{
if($i 3 > count($arrValue)) break;
$boolste = boolstr($arrValue[$i 2]);
if(isset($res))
{
if($arrValue[$j 2]=='AND')
$res = $res amp;amp; $boolste;
elseif($arrValue[$j 2]=='OR')
$res = $res || $boolste;
if($res==true)
$a='true';
else $a= 'false';
$j = 2;
}
else
$res = $boolste;
$i = 2;
}
return $res;
}