Php 从数组值创建图形:x-y、y-z、z-x

Php 从数组值创建图形:x-y、y-z、z-x,php,arrays,path,Php,Arrays,Path,我有一个包含以下数组的主数组 (至少50种不同类型): 我目前正在用php编程,但我可能可以在java、c#等中使用相同的函数 我想为每个键创建和遍历一个图,并对其运行操作,例如: x-y-z-x : 12 * 6 * 19 x-y-x : 12 * 56 x-z-x : 67 * 19 y-z-y : 6 * 18 ....... 我一直在尝试使用foreach循环独立运行每一个循环,但对于我拥有的数据集大小来说,它不起作用 任何帮助都将不胜感激。谢谢根据需要,代码是用php编写的,您也可以

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

我目前正在用php编程,但我可能可以在java、c#等中使用相同的函数

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

x-y-z-x : 12 * 6 * 19
x-y-x : 12 * 56
x-z-x : 67 * 19
y-z-y : 6 * 18
.......
我一直在尝试使用foreach循环独立运行每一个循环,但对于我拥有的数据集大小来说,它不起作用


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

根据需要,代码是用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();
?>
函数initData($final,$path,$value){
对于($i=0;$i'12');
$b=数组('type'=>'y-z','value'=>'6');
$c=数组('type'=>'y-x','value'=>'56');
$d=数组('type'=>'z-x','value'=>'19');
$e=数组('type'=>'z-y','value'=>'18');
$f=数组('type'=>'x-z','value'=>'67');
$path=[];
$values=[];
$testString='x-y-z';
$final=数组($a、$b、$c、$d、$e、$f);
$data=initData($final,$path,$value);
$path=$data[0];
$values=$data[1];
对于($i=0;$i)

可能的重复-谢谢,但我实际上正在尝试从一个元素返回到它的所有可能路径。例如:x-y-x,x-z-x,x-y-z-xYou可以在test函数的testString变量中输入任何您想要的字符串。而且不仅是一个有3个节点的路径,您还可以输入一个字符串,例如“x-y-x-z-y-x-y”输出正确答案。
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();
?>