在php中检测回文

时间:2015-04-30 14:36:22

标签: php arrays string

我正在尝试创建一个程序,用于确定字符串是否为回文序列。

这是我得到的错误。

  

注意:第22行的C:\ wamp \ www \ task18.php中的数组到字符串转换

我的代码如下:

<?php

//TASK 18 PALINDROME
//use string split function to split a string into an array

$str = "Mum";
$str =strtolower($str);

$strArray = array();
$strArray = str_split($str);

$len = sizeof($strArray);
$reverseStr ="";

for($i=$len-1; $i>=0; $i--){
    $reverseStr .=$strArray[$i];
}
if ($strArray == $reverseStr) {
    echo " $strArray is a palindrome";
} else {
    echo " $strArray is not a palindrome";
}

4 个答案:

答案 0 :(得分:1)

首先,您要将字符串($reverseStr)与数组($strArray)进行比较。

您需要编辑代码:

for($i=$len-1; $i>=0; $i--){
    $reverseStr[] .=$strArray[$i];
}

然后将反转的单词放入数组中。因此,mum将正确输出为mum,测试将为tset,但是在数组中。

这将使if通过,但你不能回显一个数组,所以你应该回显$str

完整代码:

$str = "mum";
$str =strtolower($str);

$strArray = array();
$strArray = str_split($str);

$len = sizeof($strArray);
$reverseStr = array();

for($i=$len-1; $i>=0; $i--){
    $reverseStr[] .=$strArray[$i];
}
if ($strArray == $reverseStr) {
    echo "$str is a palindrome";
} else {
    echo "$str is not a palindrome";
}

或者如果您需要$strArray使用echo,则可以使用implode()

echo implode($strArray). " is/is not a palindrome";

如果你想缩短它,你可以使用它:

$str = strtolower("Mum");
$strArray = str_split($str);
$len = sizeof($strArray);
$reverseStr = array();
for($i=$len-1; $i>=0; $i--)
    $reverseStr[] .=$strArray[$i];
echo "$str is ".($strArray==$reverseStr ? "" : "not") . " a palindrome";

答案 1 :(得分:1)

描述: - 你不能回应一个数组,这就是你得到这个错误的原因。因为你正在回应一个不可能的数组。类型杂耍(变量有时会被自动转换为最合适的。)这同样发生在你的代码,因为你试图回应一个数组,当php试图将它转换为字符串时,它失败了。以下是使用str_split()检查palidrome的代码。

  <?php
$word = strtolower("mum");
$splitted = str_split($word);
$reversedWord = "";
$length = strlen($word);
for($i = 0; $i < $length; $i++)
    $reversedWord .= $splitted[$length - $i - 1];
echo $word == $reversedWord ? "It's a palindrome " : "It's not a palindrome";
?>

答案 2 :(得分:0)

你也可以在不使用任何php函数的情况下使用给定的东西。

$str="level";

for($i=0;$i<40000;$i++)

    if($str[$i])
        $count++;
    else
    break;


    for ($j=$count;$j >=0; $j--){
         $newStr.=$str[$j];
    }
    //echo $newStr;

        if($newStr==$str)
            echo  $newStr."  is a palindrome";

            else

            echo  $newStr."  is not a palindrome";

?>

答案 3 :(得分:0)

您可能想尝试一下,它有效......

distances = [1,2]

df = pd.DataFrame(np.random.randint(0,100,size=(100, 4)),
                  columns=['Group','Dist1','Dist2','Value'])

# get one row per group, with the two distances for each row
df_groups = df.groupby('Group')[['Dist1','Dist2']].mean()

# create KDTree for quick searching
tree = cKDTree(df_groups[['Dist1','Dist2']])

# find points within a given radius
for i in distances:
    closeby = tree.query_ball_tree(tree, r=i)

    # put into density column
    df_groups['groups_within_' + str(i) + 'miles'] = [len(x) for x in closeby]

    # get average values of nearby groups
    for idx, val in enumerate(df_groups.index):
        val_idx = df_groups.iloc[closeby[idx]].index.values
        mean = df.loc[df['Group'].isin(val_idx), 'Value'].mean()
        df_groups.loc[val, str(i) + '_mean_values'] = mean

    # merge back to dataframe
    df = pd.merge(df, df_groups[['groups_within_' + str(i) + 'miles', 
                                 str(i) + '_mean_values']], 
                  left_on='Group', 
                  right_index=True)