Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何消除与字谜结果相等或相反的字符串?_Php_Arrays_Anagram - Fatal编程技术网

Php 如何消除与字谜结果相等或相反的字符串?

Php 如何消除与字谜结果相等或相反的字符串?,php,arrays,anagram,Php,Arrays,Anagram,我已经接近我想要的了。我遇到了一些逻辑问题,如果结果与所述结果相等或相反,则不显示结果。我正在寻找两个美国州名的字谜,这是另外两个州名的字谜。我已经找到了解决方案,现在它实际上只是一个显示问题……我想。任何帮助都将不胜感激。多谢各位 所以最大的问题是你把各州连接在一起的方式。在您要匹配的州列表中,您正在匹配阿拉巴马州阿拉斯加州和阿拉斯加州阿拉巴马州。所以一件好事就是只匹配唯一的两个状态组合 $doubleStates = array(); for ($i = 0, $max = count($

我已经接近我想要的了。我遇到了一些逻辑问题,如果结果与所述结果相等或相反,则不显示结果。我正在寻找两个美国州名的字谜,这是另外两个州名的字谜。我已经找到了解决方案,现在它实际上只是一个显示问题……我想。任何帮助都将不胜感激。多谢各位


所以最大的问题是你把各州连接在一起的方式。在您要匹配的州列表中,您正在匹配阿拉巴马州阿拉斯加州和阿拉斯加州阿拉巴马州。所以一件好事就是只匹配唯一的两个状态组合

$doubleStates = array();

for ($i = 0, $max = count($states); $i < $max; $i++) {
    // The first loop starts from the first element of the array
    for ($j = $i + 1; $j < $max; $j++) {
        // The second loop starts from the next element of the first loop
        $doubleStates[] = $states[$i] . $states[$j];
    }
}
$doubleStates=array();
对于($i=0,$max=count($states);$i<$max;$i++){
//第一个循环从数组的第一个元素开始
对于($j=$i+1;$j<$max;$j++){
//第二个循环从第一个循环的下一个元素开始
$doubleStates[]=$states[$i]。$states[$j];
}
}
我可能不应该为您编写所有的代码,但我被迷住了:

<?php

function findAnagrams($array) {
    do {
        $matcher = null;
        $matches = array();
        foreach ($array as $key => $val) {
            if (is_null($matcher)) {
                unset($array[$key]);
                $matcher = $val;
            } elseif (isAnagram($matcher, $val)) {
                if (empty($matches)) {
                    $matches[] = $matcher;
                }
                $matches[] = $val;
            }
        }

        if (count($matches) > 0) {
            print_r($matches);
            echo "<br >";
        }
    } while (count($array) > 0);
}

function isAnagram($a, $b) {
    return letterize($a) == letterize($b);
}

function letterize($a) {
    $array = str_split(str_replace(' ', '', strtolower($a)));
    sort($array);
    return join($array);
}

$states = array('Alabama','Alaska','Arizona','Arkansas','California','Colorado',
    'Connecticut','Delaware','Florida','Georgia','Hawaii','Idaho','Illinois',
    'Indiana','Iowa','Kansas','Kentucky','Louisiana','Maine','Maryland',
    'Massachusetts','Michigan','Minnesota','Mississippi','Missouri','Montana',
    'Nebraska','Nevada','New Hampshire','New Jersey','New Mexico','New York',
    'North Carolina','North Dakota','Ohio','Oklahoma','Oregon','Pennsylvania',
    'Rhode Island','South Carolina','South Dakota','Tennessee','Texas','Utah',
    'Vermont','Virginia','Washington','West Virginia','Wisconsin','Wyoming');

$doubleStates = array();

for ($i = 0, $max = count($states); $i < $max; $i++) {
    for ($j = $i + 1; $j < $max; $j++) {
        $doubleStates[] = $states[$i] . $states[$j];
    }
}

findAnagrams($doubleStates);

所以最大的问题是你把各州连接在一起的方式。在您要匹配的州列表中,您正在匹配阿拉巴马州阿拉斯加州和阿拉斯加州阿拉巴马州。所以一件好事就是只匹配唯一的两个状态组合

$doubleStates = array();

for ($i = 0, $max = count($states); $i < $max; $i++) {
    // The first loop starts from the first element of the array
    for ($j = $i + 1; $j < $max; $j++) {
        // The second loop starts from the next element of the first loop
        $doubleStates[] = $states[$i] . $states[$j];
    }
}
$doubleStates=array();
对于($i=0,$max=count($states);$i<$max;$i++){
//第一个循环从数组的第一个元素开始
对于($j=$i+1;$j<$max;$j++){
//第二个循环从第一个循环的下一个元素开始
$doubleStates[]=$states[$i]。$states[$j];
}
}
我可能不应该为您编写所有的代码,但我被迷住了:

<?php

function findAnagrams($array) {
    do {
        $matcher = null;
        $matches = array();
        foreach ($array as $key => $val) {
            if (is_null($matcher)) {
                unset($array[$key]);
                $matcher = $val;
            } elseif (isAnagram($matcher, $val)) {
                if (empty($matches)) {
                    $matches[] = $matcher;
                }
                $matches[] = $val;
            }
        }

        if (count($matches) > 0) {
            print_r($matches);
            echo "<br >";
        }
    } while (count($array) > 0);
}

function isAnagram($a, $b) {
    return letterize($a) == letterize($b);
}

function letterize($a) {
    $array = str_split(str_replace(' ', '', strtolower($a)));
    sort($array);
    return join($array);
}

$states = array('Alabama','Alaska','Arizona','Arkansas','California','Colorado',
    'Connecticut','Delaware','Florida','Georgia','Hawaii','Idaho','Illinois',
    'Indiana','Iowa','Kansas','Kentucky','Louisiana','Maine','Maryland',
    'Massachusetts','Michigan','Minnesota','Mississippi','Missouri','Montana',
    'Nebraska','Nevada','New Hampshire','New Jersey','New Mexico','New York',
    'North Carolina','North Dakota','Ohio','Oklahoma','Oregon','Pennsylvania',
    'Rhode Island','South Carolina','South Dakota','Tennessee','Texas','Utah',
    'Vermont','Virginia','Washington','West Virginia','Wisconsin','Wyoming');

$doubleStates = array();

for ($i = 0, $max = count($states); $i < $max; $i++) {
    for ($j = $i + 1; $j < $max; $j++) {
        $doubleStates[] = $states[$i] . $states[$j];
    }
}

findAnagrams($doubleStates);

这个清理得很好,谢谢。不过,其他比赛呢?它似乎停得太早了。例如…南达科他州和北卡罗莱纳州?是的,南达科他州/北卡罗莱纳州-北达科他州/南卡罗来纳州是最后的选择再次感谢。我花了相当多的时间尝试获取每种可能的结果(包括原始字符串和它的反向),将它们放入数组中,然后过滤掉重复的结果。不用说,我还没把它用到工作上。这很干净,谢谢。不过,其他比赛呢?它似乎停得太早了。例如…南达科他州和北卡罗莱纳州?是的,南达科他州/北卡罗莱纳州-北达科他州/南卡罗来纳州是最后的选择再次感谢。我花了相当多的时间尝试获取每种可能的结果(包括原始字符串和它的反向),将它们放入数组中,然后过滤掉重复的结果。不用说,我还没有让它发挥作用。