offset解决办法,PHP冒泡算法详解

2019-10-02 21:54栏目:网络技术
TAG:

例:

实现

 代码如下

 代码如下

复制代码 代码如下:

/**************************************************************
 *
*    使用特定function对数组中所有元素做处理
*    @param    string    &$array        要处理的字符串
*    @param    string    $function    要执行的函数
*    @return boolean    $apply_to_keys_also        是否也应用到key上
*    @access public
*
*************************************************************/
function arrayRecursive(&$array, $function, $apply_to_keys_also = false)
{
    foreach ($array as $key => $value) {
        if (is_array($value)) {
            arrayRecursive($array[$key], $function, $apply_to_keys_also);
        } else {
            $array[$key] = $function($value);
        }

$array[1] ='www.111cn.net';

/*
    冒泡算法(递归实现)
*/

        if ($apply_to_keys_also && is_string($key)) {
            $new_key = $function($key);
            if ($new_key != $key) {
                $array[$new_key] = $array[$key];
                unset($array[$key]);
            }
        }
    }
}

echo $array[0] ;

function maoPao($array, $index=0)
{
    $count = count($array);
    if(($count-1) <= $index)
        return $array;

/**************************************************************
 *
*    将数组转换为JSON字符串(兼容中文)
*    @param    array    $array        要转换的数组
*    @return string        转换得到的json字符串
*    @access public
*
*************************************************************/
function JSON($array) {
    arrayRecursive($array, 'urlencode', true);
    $json = json_encode($array);
    return urldecode($json);
}

输入结果是

    for($i=$count-1; $i>$index; $i-- )
    {
        if($array[$i] < $array[$i-1])
        {
            $tmp = $array[$i];
            $array[$i] = $array[$i-1];
            $array[$i-1] = $tmp;
        }
    }
    $index++;
    return maoPao($array, $index);
    //return maoPao($array, $index++);
}

连接数据库取值给数组$array1

Notice: Undefined offset: 1 in D:wwwrootwraskseo404.php on line 5 下面我们来看解决办法

    $arr = array(12,4,3,1,9,5,6,8,7);
    var_dump(maoPao($arr));

 代码如下

解决这个问题很简单如

结果:

$dbcnx = @mysql_connect ( "localhost", "root", "1234" );
if (! $dbcnx) {
    echo ("Unable to connect to the " . "database server at this time.");
    exit ();
}

 代码如下

复制代码 代码如下:

if (! @mysql_select_db ( "pms" )) {
    echo ("Unable to locate the joke " . "database at this time.");
    exit ();
}

echo isset($array[0])?$array[0]:'数组未定义';

Array ( [0] => 1 [1] => 3 [2] => 4 [3] => 5 [4] => 6 [5] => 7 [6] => 8 [7] => 9 [8] => 12 )

mysql_query ( "SET NAMES 'GB2312'" );

这样就很好的解决这个问题了。

问题:

    $q=mysql_query("select * from ability where ALV = 1");
    while($row=mysql_fetch_array($q)){
     $array1[] = $row[AName];
}

在尝试这个实现的时候遇到了一个问题,还未解决。
在这里:

数组array1传递到JavaScript给数组ability1

复制代码 代码如下:

 代码如下

$index++;
return maoPao($array, $index);
//return maoPao($array, $index++);

<script type="text/javascript" src="JS/jquery-1.7.2.min.js"></script>
<script type="text/javascript">
var ability1=<?php echo JSON($array1);?>;
var a=eval("ability1");
alert(a[0]);
</script>

/******************
    如果直接使用第三行,而不是先$index++,再ruturn的话就会进入死循环.我在函数的开始输出$index,都是0,就是说$index++后传递给递归函数的参数不是$index++应该的结果(即$index=$index+1).
    maoPao($array, $index++)不是$index++; return maoPao($array, $index);的简短写法吗,为何两种结果不一样,希望能得到各位的解答。
******************/

另一种json中文乱码解决方法

补充:

如果是中文的话就要注意了

解答:

在网上找到一种解决方法:

复制代码 代码如下:

 代码如下

$index++与++$index两者的区别, $index++被称作后增量, ++$index被称为前增量, 虽然最后的$index的结果都是会+1。 但传递变量的时候会有不一样的地方。

 
<?php
/* 处理json_encode中文乱码 */
$data = array ('game' => '冰火国度', 'name' => '刺之灵', 'country' => '冰霜国', 'level' => 45 );
echo json_encode ( $data );
echo "<br>";
$newData = array ();
foreach ( $data as $key => $value ) {
$newData [$key] = urlencode ( $value );
}
echo urldecode ( json_encode ( $newData ) );
?>  

$index = 1;
$m = $index++;
echo $index.'<br/>';  //结果为2
echo $m.'<br/>';      //结果为1. 因为是后增量, 会先把初始的$index=1 赋给$m,然后$index自增1;

后来请教了别人,还可以用base64编码,不过base64编码不可以放在URL中,百度是这样解释的:

$index = 1;
$n = ++$index;
echo $index.'<br/>';  //结果为2
echo $n;              //结果为2.因为是前增量, 会先执行$index+1的操作, 再赋值给$n;

标准的Base64并不适合直接放在URL里传输,因为URL编码器会把标准Base64中的“/”和“+”字符变为形如“%XX”的形式,而这些“%”号在存入数据库时还需要再进行转换,因为ANSI SQL中已将“%”号用作通配符。

这个可能不太好记住, 所以在使用的时候一定要注意, 在上面的问题中我就是忽略了这个问题导致了$index无限传递0值使得递归锁死。

不过我的数据是要通过POST发送的,并不在HTTP 的head中,而在message-body里,所以不受影响。

您可能感兴趣的文章:

  • php解决约瑟夫环示例
  • 约瑟夫环问题的PHP实现 使用PHP数组内部指针操作函数
  • php实现约瑟夫问题的方法小结
  • php约瑟夫问题解决关于处死犯人的算法
  • 关于PHP递归算法和应用方法介绍
  • PHP递归算法的详细示例分析
  • php全排列递归算法代码
  • PHP使用递归算法无限遍历数组示例
  • PHP二分查找算法示例【递归与非递归方法】
  • php获得文件夹下所有文件的递归算法的简单实例
  • PHP基于递归实现的约瑟夫环算法示例

json_encode 只能接受utf-8格式的数据

例如:'胥'经过json_encode处理后变为'u80e5',最终的json中中文部分被替换为unicode编码。我们要解决的就是将对象转换为json并保证对象内部的中文在json中仍然是以正常的中文出现,现在看来只使用json_encode是不能达到目的的。
  我的解决方法:先将类中的中文字段进行url编码(urlencode),然后再对对象进行json编码(jsonencode),最后url解码(urldecode)json,即最终的json,里面的中文依旧是那个中文!
测试代码如下:

 

 代码如下

<?php
class myClass {
public $item1 = 1;
public $item2 = '中文';
function to_json() {
//url编码,避免json_encode将中文转为unicode
$this->item2 = urlencode($this->item2);
$str_json = json_encode($this);
//url解码,转完json后将各属性返回,确保对象属性不变
$this->item2 = urldecode($this->item2);
return urldecode($str_json);
}
}
$c = new myClass();
echo json_encode($c);
echo '<br/>';
echo $c->to_json();
echo '<br/>';
echo json_encode($c);
echo '<br/>';
echo json_encode('胥');
?>

程序输出结果:

{"item1":1,"item2":"u4e2du6587"}
{"item1":1,"item2":"中文"}
{"item1":1,"item2":"u4e2du6587"}
"u80e5"  

注具可参考:

版权声明:本文由澳门新葡亰平台游戏发布于网络技术,转载请注明出处:offset解决办法,PHP冒泡算法详解