【问题标题】:Create Graphs from Array values : x-y , y-z , z-x从数组值创建图形:x-y、y-z、z-x
【发布时间】:2017-07-11 17:01:22
【问题描述】:

我有一个包含以下数组的主数组 (至少 50 种不同的类型):

我目前正在使用 php 进行编程,但我可能会在 java、c# 等中使用相同的功能...

array('type'=>'x-y','value'=>'12');

array('type'=>'y-z','value'=>'6');

array('type'=>'y-x','value'=>'56');

array('type'=>'z-x','value'=>'19');

array('type'=>'z-y','value'=>'18');

array('type'=>'x-z','value'=>'67');

........

我想为每个键创建和遍历一个图并对它们运行操作,例如:

x-y-z-x : 12 * 6 * 19
x-y-x : 12 * 56
x-z-x : 67 * 19
y-z-y : 6 * 18
.......

我一直在尝试使用 foreach 循环独立运行每个循环,但它不适用于我拥有的数据集大小。

任何帮助将不胜感激。谢谢

【问题讨论】:

标签: php arrays path


【解决方案1】:

代码根据需要在php中,你也可以测试它..

function initData($final, $paths, $values) {
    for($i=0; $i<sizeof($final);$i++) {
        $path = explode('-', $final[$i]["type"]);
        $value = $final[$i]["value"];
        array_push($paths, $path);
        array_push($values, $value);
    }
    return [$paths, $values];
}

function getFinalValue($finalPath, $paths, $values) {
    $path = explode('-', $finalPath);
    $finalValue = 1;
    for($i=0;$i<sizeof($path)-1;$i++) {
        $stop = $path[$i+1];
        $start = $path[$i];
        $smallPath = array($start, $stop);
        $finalValue *= getValue($smallPath, $paths, $values);
    }
    return $finalValue;
}

function getValue($smallPath, $paths, $values) {
    $value = 0;
    for($i=0; $i<sizeof($paths);$i++) {
        if($smallPath[0] == $paths[$i][0])
        {
            if($smallPath[1] == $paths[$i][1]) {
                print_r($smallPath);
                echo '   ';
                $value = $values[$i];
                print_r($value);
                echo '<br>';
            }
        }
    }
    return $value;
}



//Test
function test() {
    $a = array('type'=>'x-y','value'=>'12');
    $b = array('type'=>'y-z','value'=>'6');
    $c = array('type'=>'y-x','value'=>'56');
    $d = array('type'=>'z-x','value'=>'19');
    $e = array('type'=>'z-y','value'=>'18');
    $f = array('type'=>'x-z','value'=>'67');

    $paths = [];
    $values = [];
    $testString = 'x-y-z';
    $final = array($a,$b,$c,$d,$e,$f);


    $data = initData($final, $paths, $values);
    $paths = $data[0];
    $values = $data[1];
    for ($i=0;$i<sizeof($paths);$i++) {
        print_r($paths[$i]);
        print_r($values[$i]);
        echo '<br>';
    }
    echo '<br>';
    echo '<br>';


    $finalValue = getFinalValue($testString, $paths, $values);
    echo $testString . '=' . $finalValue;


}
test();
?>

【讨论】:

  • - 谢谢,但我实际上是在尝试从一个元素返回所有可能的路径。例如:x-y-x、x-z-x、x-y-z-x
  • 您可以在测试函数的 testString 变量中输入您希望输入的任何字符串。不仅是一个有 3 个节点的路径,您还可以输入一个字符串,例如“x-y-x-z-y-x-z-x-y”,仍然会为您输出正确的答案。
猜你喜欢
  • 2013-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-24
  • 2022-01-12
  • 2012-01-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多