• 关于

    array_count_values

    的搜索结果

回答

由于似乎没有人做过此事,因此我认为最好在某个地方提供参考。我已经通过基准测试或代码掠过来表征这些array_*功能。我试图将更有趣的Big-O放在顶部。此列表不完整。 注意:假设是哈希查找,所有计算出来的Big-O都是O(1),即使它实际上是O(n)。n的系数是如此之低,在大Big-O的特征开始生效之前,存储足够大的数组的内存开销会伤害您。例如,array_key_exists在N = 1和N = 1,000,000时的通话时间差为〜50%。 有趣的地方: isset/ array_key_exists比in_array和快得多array_search +(联盟)比array_merge(看起来更好)快一点。但是它的工作方式有所不同,因此请记住这一点。 shuffle 在与Big-O相同的层上 array_rand array_pop/ array_push比重新索引罚款更快array_shift/array_unshift 查询: array_key_existsO(n)但实际上接近O(1)-这是由于碰撞中的线性轮询,但是由于碰撞的机会非常小,因此系数也非常小。我发现您将哈希查找视为O(1)来给出更现实的big-O。例如,N = 1000和N = 100000之间的差异仅减慢了50%。 isset( $array[$index] )O(n)但实际上接近O(1)-它使用与array_key_exists相同的查找。由于是语言构造,因此如果密钥是硬编码的,将缓存查找,从而在重复使用同一密钥的情况下加快了查找速度。 in_array O(n)-这是因为它将对数组进行线性搜索,直到找到该值为止。 array_search O(n)-它使用与in_array相同的核心功能,但返回值。 队列功能: array_push O(∑ var_i,对于所有i) array_pop O(1) array_shift O(n)-必须重新索引所有键 array_unshift O(n + ∑ var_i,对于所有i)-必须重新索引所有键 数组相交,并集,减法: array_intersect_key 如果交集100%进行O(Max(param_i_size)* ∑param_i_count,对于所有i),如果交集0%相交O(∑param_i_size,对于所有i) array_intersect 如果交集100%对所有i执行O(n ^ 2 * ∑param_i_count,对于所有i),如果交集0%与O(n ^ 2)相交 array_intersect_assoc 如果交集100%进行O(Max(param_i_size)* ∑param_i_count,对于所有i),如果交集0%相交O(∑param_i_size,对于所有i) array_diff O(πparam_i_size,for all i)-那是所有param_sizes的乘积 array_diff_key O(∑ param_i_size,for i!= 1)-这是因为我们不需要遍历第一个数组。 array_merge O(∑ array_i,i!= 1)-不需要遍历第一个数组 (联合)O(n),其中n是第二个数组的大小(即array_first + array_second)-比array_merge少的开销,因为它不必重新编号 array_replace O(∑ array_i,对于所有i) 随机: shuffle 上) array_rand O(n)-需要线性轮询。 明显的Big-O: array_fill 上) array_fill_keys 上) range 上) array_splice O(偏移量+长度) array_slice O(偏移量+长度)或O(n)如果长度= NULL array_keys 上) array_values 上) array_reverse 上) array_pad O(pad_size) array_flip 上) array_sum 上) array_product 上) array_reduce 上) array_filter 上) array_map 上) array_chunk 上) array_combine 上) 我要感谢Eureqa使得找到函数的Big-O很容易。这是一个了不起的免费程序,可以为任意数据找到最佳拟合函数。 编辑: 对于那些怀疑PHP数组查找是的人O(N),我编写了一个基准测试(O(1)对于大多数实际值它们仍然有效)。 php数组查找图 $tests = 1000000; $max = 5000001; for( $i = 1; $i <= $max; $i += 10000 ) { //create lookup array $array = array_fill( 0, $i, NULL ); //build test indexes $test_indexes = array(); for( $j = 0; $j < $tests; $j++ ) { $test_indexes[] = rand( 0, $i-1 ); } //benchmark array lookups $start = microtime( TRUE ); foreach( $test_indexes as $test_index ) { $value = $array[ $test_index ]; unset( $value ); } $stop = microtime( TRUE ); unset( $array, $test_indexes, $test_index ); printf( "%d,%1.15f\n", $i, $stop - $start ); //time per 1mil lookups unset( $stop, $start ); } 问题来源于stack overflow
保持可爱mmm 2020-01-15 16:54:32 0 浏览量 回答数 0

回答

如果要重新索引从零开始,只需执行以下操作: $iZero = array_values($arr); 如果您需要从头开始,请使用以下命令: $iOne = array_combine(range(1, count($arr)), array_values($arr)); 以下是所用功能的手册页: array_values() array_combine() range() 问题来源于stack overflow
保持可爱mmm 2020-02-06 23:54:28 0 浏览量 回答数 0

回答

您可以使用array_count_values函数 $array = array('apple', 'orange', 'pear', 'banana', 'apple', 'pear', 'kiwi', 'kiwi', 'kiwi'); print_r(array_count_values($array)); 将输出 Array ( [apple] => 2 [orange] => 1 [pear] => 2 etc... )
保持可爱mmm 2020-02-08 10:20:47 0 浏览量 回答数 0

问题

无法保存到数据库

能帮我看看吗?数据无法保存在数据库中并且没有任何功能,我已经定义了数据库 $conn = mysqli_connect(HOST,USER,PASSWORD,DATABASE); if (isset($...
保持可爱mmm 2019-12-01 21:57:51 5 浏览量 回答数 0

问题

destoon 的上传文件upload.php怎么整合oss

这个文件怎么样整合oss,通过upload.php这个文件上传的文件或图片直接到oss里,谢谢,以下是upload.php代码&lt;?php@set_time_limit(0);require 'common.inc.php';if($D...
nemovip 2019-12-01 20:21:22 1287 浏览量 回答数 1

问题

PHP文件无法输入部分代码

这是我的php文件中的一个函数,用于满足我的android应用程序的请求。 function checkin($DB, $TechID, $ClientID, $SiteID){ $dbConnection = my...
保持可爱mmm 2020-05-11 17:28:21 0 浏览量 回答数 1

回答

使用php脚本导出数据库的最佳方法。 或添加特定表的第五个参数(数组):array("mytable1","mytable2","mytable3")用于多个表 select_db($name); $mysqli->query("SET NAMES 'utf8'"); $queryTables = $mysqli->query('SHOW TABLES'); while($row = $queryTables->fetch_row()) { $target_tables[] = $row[0]; } if($tables !== false) { $target_tables = array_intersect( $target_tables, $tables); } foreach($target_tables as $table) { $result = $mysqli->query('SELECT * FROM '.$table); $fields_amount = $result->field_count; $rows_num=$mysqli->affected_rows; $res = $mysqli->query('SHOW CREATE TABLE '.$table); $TableMLine = $res->fetch_row(); $content = (!isset($content) ? '' : $content) . "\n\n".$TableMLine[1].";\n\n"; for ($i = 0, $st_counter = 0; $i < $fields_amount; $i++, $st_counter=0) { while($row = $result->fetch_row()) { //when started (and every after 100 command cycle): if ($st_counter%100 == 0 || $st_counter == 0 ) { $content .= "\nINSERT INTO ".$table." VALUES"; } $content .= "\n("; for($j=0; $j<$fields_amount; $j++) { $row[$j] = str_replace("\n","\\n", addslashes($row[$j]) ); if (isset($row[$j])) { $content .= '"'.$row[$j].'"' ; } else { $content .= '""'; } if ($j<($fields_amount-1)) { $content.= ','; } } $content .=")"; //every after 100 command cycle [or at last line] ....p.s. but should be inserted 1 cycle eariler if ( (($st_counter+1)%100==0 && $st_counter!=0) || $st_counter+1==$rows_num) { $content .= ";"; } else { $content .= ","; } $st_counter=$st_counter+1; } } $content .="\n\n\n"; } //$backup_name = $backup_name ? $backup_name : $name."___(".date('H-i-s')."_".date('d-m-Y').")__rand".rand(1,11111111).".sql"; $backup_name = $backup_name ? $backup_name : $name.".sql"; header('Content-Type: application/octet-stream'); header("Content-Transfer-Encoding: Binary"); header("Content-disposition: attachment; filename=\"".$backup_name."\""); echo $content; exit; } ?>来源:stack overflow
保持可爱mmm 2020-05-17 13:53:15 0 浏览量 回答数 0

问题

MPP计算引擎 SELECT语法是什么?

语法描述 [ WITH with_query [, ...] ]SELECT [ ALL | DISTINCT ] select_expr [, ...][ FROM from_item [, ...] ][ WHERE conditi...
nicenelly 2019-12-01 21:25:30 1617 浏览量 回答数 0

问题

j-Interop连接64位系统的WMI获取信息报错:java.lang.Arr?400报错

package systeminfo.util; import java.net.UnknownHostException; import java.util.logging.Level; import org.jinterop.dco...
爱吃鱼的程序员 2020-06-07 22:25:51 0 浏览量 回答数 1

问题

MPP计算引擎 SELECT语法是什么?

语法描述 <PRE prettyprinted? linenums> [ WITH with_query [, ...] ]SELECT [ ALL | DISTINCT ] select_expr [, ...][ FROM...
nicenelly 2019-12-01 21:10:51 1381 浏览量 回答数 0

回答

与几乎所有“如何在PHP中执行SQL”问题一样,您实际上应该使用准备好的语句。这并不难: $ids = array(2, 4, 6, 8); // prepare an SQL statement with a single parameter placeholder $sql = "UPDATE MyTable SET LastUpdated = GETDATE() WHERE id = ?"; $stmt = $mysqli->prepare($sql); // bind a different value to the placeholder with each execution for ($i = 0; $i < count($ids); $i++) { $stmt->bind_param("i", $ids[$i]); $stmt->execute(); echo "Updated record ID: $id\n"; } // done $stmt->close(); 或者,您可以这样做: $ids = array(2, 4, 6, 8); // prepare an SQL statement with multiple parameter placeholders $params = implode(",", array_fill(0, count($ids), "?")); $sql = "UPDATE MyTable SET LastUpdated = GETDATE() WHERE id IN ($params)"; $stmt = $mysqli->prepare($sql); // dynamic call of mysqli_stmt::bind_param hard-coded eqivalent $types = str_repeat("i", count($ids)); // "iiii" $args = array_merge(array($types), $ids); // ["iiii", 2, 4, 6, 8] call_user_func_array(array($stmt, 'bind_param'), ref($args)); // $stmt->bind_param("iiii", 2, 4, 6, 8) // execute the query for all input values in one step $stmt->execute(); // done $stmt->close(); echo "Updated record IDs: " . implode("," $ids) ."\n"; // ---------------------------------------------------------------------------------- // helper function to turn an array of values into an array of value references // necessary because mysqli_stmt::bind_param needs value refereces for no good reason function ref($arr) { $refs = array(); foreach ($arr as $key => $val) $refs[$key] = &$arr[$key]; return $refs; } 根据需要为其他字段添加更多参数占位符。 选哪一个? 第一种变体可迭代处理可变数量的记录,从而多次访问数据库。这对于UPDATE和INSERT操作最有用。 第二种变体也适用于可变数量的记录,但是它只命中一次数据库。这比迭代方法高效得多,显然,您只能对所有受影响的记录执行相同的操作。这对于SELECT和DELETE操作,或者要更新具有相同数据的多条记录时最有用。 为什么要准备陈述? 预备语句更安全,因为它们使SQL注入攻击变得不可能。这是使用准备好的语句的主要原因,即使编写它们是更多的工作。养成明智的习惯:即使您认为“不是真的”,也要始终使用准备好的语句。疏忽会来咬你(或你的顾客)。 与将多个完整的SQL字符串发送到数据库相比,以不同的参数值多次重复使用同一条准备好的语句效率更高,因为数据库只需要编译一次该语句即可,并且也可以重新使用它。 仅将参数值发送到上的数据库execute(),因此当重复使用时,需要较少的数据通过网络。 在更长的循环中,使用准备好的语句和发送纯SQL之间的执行时间差异将变得明显。来源:stack overflow
保持可爱mmm 2020-05-10 21:49:06 0 浏览量 回答数 0

回答

PDO不适用于此类情况。您需要动态创建带有问号的字符串并将其插入查询中。 $in = str_repeat('?,', count($in_array) - 1) . '?'; $sql = "SELECT * FROM my_table WHERE my_value IN ($in)"; $stm = $db->prepare($sql); $stm->execute($in_array); $data = $stm->fetchAll(); 如果查询中还有其他占位符,则可以使用以下方法(代码取自我的PDO教程): 您可以使用array_merge()函数将所有变量连接到单个数组中,并以它们在查询中出现的顺序将其他变量以数组的形式添加: $arr = [1,2,3]; $in = str_repeat('?,', count($arr) - 1) . '?'; $sql = "SELECT * FROM table WHERE foo=? AND column IN ($in) AND bar=? AND baz=?"; $stm = $db->prepare($sql); $params = array_merge([$foo], $arr, [$bar, $baz]); $stm->execute($params); $data = $stm->fetchAll(); 如果您使用命名占位符,则代码会稍微复杂一些,因为您必须创建一系列命名占位符,例如:id0,:id1,:id2。因此,代码将是: // other parameters that are going into query $params = ["foo" => "foo", "bar" => "bar"]; $ids = [1,2,3]; $in = ""; foreach ($ids as $i => $item) { $key = ":id".$i; $in .= "$key,"; $in_params[$key] = $item; // collecting values into key-value array } $in = rtrim($in,","); // :id0,:id1,:id2 $sql = "SELECT * FROM table WHERE foo=:foo AND id IN ($in) AND bar=:bar"; $stm = $db->prepare($sql); $stm->execute(array_merge($params,$in_params)); // just merge two arrays $data = $stm->fetchAll(); 幸运的是,对于命名占位符,我们不必遵循严格的顺序,因此我们可以以任何顺序合并数组。来源:stack overflow
保持可爱mmm 2020-05-08 11:07:47 0 浏览量 回答数 0

问题

PDO MySQL:在一个查询中插入多行?mysql

您好,我正在制作一个在pdo中进行多次插入的类。 是这样的 INSERT INTO $table (key1,key2,key3,etc) VALUE (value1,value2,value3,etc), (value1...
保持可爱mmm 2020-05-17 19:51:10 2 浏览量 回答数 1

问题

数独益智游戏,内含正方形数字

两天前,我遇到了一个数独问题,尝试使用Python 3解决。我被告知确实存在一个解决方案,但是我不确定是否存在多个解决方案。 问题如下:数独的9x9网格完全为空。但是,...
is大龙 2020-03-23 20:21:05 5 浏览量 回答数 1

回答

首先要说的是,由于只有一个查询,您可以插入多行 INSERT INSERT INTO Table (col1, col2, col3) VALUES ('abc', 'def', 'ghi'), ('abc', 'def', 'ghi'), ('abc', 'def', 'ghi'), ('abc', 'def', 'ghi'), ('abc', 'def', 'ghi') -- and so on... 知道了这一点之后,便可以使用PDO获得良好的解决方案(例如)。 你要记住,你想有一个完整prepare和execute过程(在安全期限,你必须单独通过每个参数)。 假设您要插入的行结构如下: $rows = array( array('abc', 'def', 'ghi'), // row 1 to insert array('abc', 'def', 'ghi'), // row 2 to insert array('abc', 'def', 'ghi') // row 3 to insert // and so on ... ); 您的目标是将此结果作为准备好的查询: INSERT INTO Table (col1, col2, col3) VALUES (?, ?, ?), (?, ?, ?), (?, ?, ?) 及其相应的执行: PDOStatement::execute(array('abc', 'def', 'ghi', 'abc', 'def', 'ghi', 'abc', 'def', 'ghi')); 好吧,您现在只需要这样做: $rows = array( array('abc', 'def', 'ghi'), array('abc', 'def', 'ghi'), array('abc', 'def', 'ghi') ); $row_length = count($rows[0]); $nb_rows = count($rows); $length = $nb_rows * $row_length; /* Fill in chunks with '?' and separate them by group of $row_length */ $args = implode(',', array_map( function($el) { return '('.implode(',', $el).')'; }, array_chunk(array_fill(0, $length, '?'), $row_length) )); $params = array(); foreach($rows as $row) { foreach($row as $value) { $params[] = $value; } } $query = "INSERT INTO Table (col1, col2, col3) VALUES ".$args; $stmt = DB::getInstance()->prepare($query); $stmt->execute($params); 而且...就是这样! 这样,每个参数都将被单独处理,这就是您想要的(安全性,安全性,安全性!)及其所有内容,并且只需一个INSERT查询就可以动态方式进行处理 如果要插入的行太多(请参阅此),则应execute一个接一个 $rows = array( array('abc', 'def', 'ghi'), // row 1 to insert array('abc', 'def', 'ghi'), // row 2 to insert array('abc', 'def', 'ghi') // row 3 to insert // and so on ... ); $args = array_fill(0, count($rows[0]), '?'); $query = "INSERT INTO Table (col1, col2, col3) VALUES (".implode(',', $args).")"; $stmt = $pdo->prepare($query); foreach ($rows as $row) { $stmt->execute($row); }来源:stack overflow
保持可爱mmm 2020-05-17 22:38:21 0 浏览量 回答数 0

回答

/** * 插入数据库 * @param $table * @param $data */ function insert($table, $data) { //解析字段 $attrs= array_keys($data); $cols = join(',',$attrs); //解析值 //因为值有字符串和数字之分,都加上单引号 foreach($data as &$row){ $row = "'".$row."'"; } $datas = join(',',$data); //生成的SQL为 $sql = "INSERT INTO `{$table}`({$cols}) VALUES ({$datas})"; } 记得最佳答案喔~ ######回复 @JeffreyLin : 我现在都用PDO来做的。######使用sql语句的时候,会有这样一个情况:我打印出来了 insert into `admin_user`(`user,email,password`)VALUES(林伟盛,1113288996@qq.com,3363064) 问题处在admin_user(`涵括了`,导致语法错误)######拼接参数的写法存在注入式攻击的危险呀,要用参数化写法###### funciton populateForm($reules){  balabala....  if ($valid){  return array("valid"=>true,"data"=array(cleandata)); }else {  return array("valid"=>false,"errormsg"=array(wrongdata)); } } ######function insertData($tableName,$dataArr) {     //...check tableName       if (count($dataArr) == 0){         return False;     }     $fields = array_keys($dataArr);     foreach ($dataArr as $value){         $val[] = $value;     }     $sql = "INSERT INTO `{$tableName}`(".implode(',', $fields).") VALUES (".implode(',', $val).")";     //...execute Sql     //...return dataResult }###### 引用来自“xialeistudio”的评论 /** * 插入数据库 * @param $table * @param $data */ function insert($table, $data) { //解析字段 $attrs= array_keys($data); $cols = join(',',$attrs); //解析值 //因为值有字符串和数字之分,都加上单引号 foreach($data as &$row){ $row = "'".$row."'"; } $datas = join(',',$data); //生成的SQL为 $sql = "INSERT INTO `{$table}`({$cols}) VALUES ({$datas})"; } 记得最佳答案喔~ $arr = array('user'=>'kopa','email'=>'1113288996@qq.com'); $arr1 = array_keys($arr); // print_r($arr1); $str = implode(',', $arr1); // print_r($str); foreach ($arr as $key) { $key = "'".$key."'"; // print_r($key); } $arr = implode(',', $arr); print_r($arr); 分解了一遍,完全明白。感谢! ###### 正确的写法应该是  $str = '`'.implode('`,`',array_keys($arr)).'`'; $arr = "'".implode("','",$arr)."'"; 这样出来的结果才是insert into `table`(`user`,`passwd`) values('$user','$passwd';)   
kun坤 2020-06-09 22:23:18 0 浏览量 回答数 0

回答

import java.sql.DriverManager import org.apache.spark.SparkConf import org.apache.spark.streaming.{Seconds, StreamingContext} object ForeachRDDApp {   def main(args: Array[String]) {     val sparkConf = new SparkConf()       .setAppName("ForeachRDDApp")       .setMaster("local[2]")     val ssc = new StreamingContext(sparkConf, Seconds(10))     val lines = ssc.socketTextStream("hadoop000",9997)     val results = lines.flatMap(.split(",")).map((,1)).reduceByKey(+)     // TODO... 将results写入到MySQL中 //    results.foreachRDD(rdd => { //        rdd.foreach(x => { //          val connection = createConnection() //          val word = x._1 //          val count = x._2.toInt //          val sql = s"insert into wc(word, c) values ('$word', $count)" //          connection.createStatement().execute(sql) //        }) //    })     // 最佳实践     results.foreachRDD(rdd => {       rdd.foreachPartition(partition => {         val connection = createConnection()         partition.foreach(x => {           val word = x._1           val count = x._2.toInt           val sql = s"insert into wc(word, c) values ('$word', $count)"           connection.createStatement().execute(sql)         })         connection.close()       })       rdd.foreach(x => {         val connection = createConnection()         val word = x._1         val count = x._2.toInt         val sql = s"insert into wc(word, c) values ('$word', $count)"         connection.createStatement().execute(sql)       })     })     ssc.start()  // 一定要写 //    lines.print()     ssc.awaitTermination()   }   def createConnection() = {     Class.forName("com.mysql.jdbc.Driver")     DriverManager.getConnection("jdbc:mysql://hadoop000:3306/ss2","root","root")   } } 答案来源网络,供参考 原文链接:https://blog.csdn.net/qq_15300683/article/details/80689998
问问小秘 2019-12-02 03:05:56 0 浏览量 回答数 0

问题

字符串函数是什么?

Note: 这些函数只处理UTF-8编码的可见字符,对输入字符串不作编码格式检查,非法的字符或字符串会导致查询结果异常。lower() 和 upper()函数只处理英文字母的大小写转换,这对中文等...
nicenelly 2019-12-01 21:26:22 1658 浏览量 回答数 0

回答

curl_setopt($ch, CURLOPT_HTTPHEADER, Array("Content-Type: text/xml"));  或者   $header[0] = "Accept: text/xml,application/xml,application/xhtml+xml,";    $header[0] .= "text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5";    $header[] = "Cache-Control: max-age=0";    $header[] = "Connection: keep-alive";    $header[] = "Keep-Alive: 300";    $header[] = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7";    $header[] = "Accept-Language: en-us,en;q=0.5";    $header[] = "Pragma: "; // browsers keep this blank.    curl_setopt($curl, CURLOPT_HTTPHEADER, $header);  ###### 引用来自“mickelfeng”的答案 curl_setopt($ch, CURLOPT_HTTPHEADER, Array("Content-Type: text/xml"));  或者   $header[0] = "Accept: text/xml,application/xml,application/xhtml+xml,";    $header[0] .= "text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5";    $header[] = "Cache-Control: max-age=0";    $header[] = "Connection: keep-alive";    $header[] = "Keep-Alive: 300";    $header[] = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7";    $header[] = "Accept-Language: en-us,en;q=0.5";    $header[] = "Pragma: "; // browsers keep this blank.    curl_setopt($curl, CURLOPT_HTTPHEADER, $header);  可以自定义 header 参数吗? ###### 可以,但是服务端能识别不。不知道你用的啥web server。apache有个方法 array apache_response_headers ( void ) ###### 引用来自“mickelfeng”的答案 可以,但是服务端能识别不。不知道你用的啥web server。apache有个方法 array apache_response_headers ( void ) 我用的是 apache~ ###### 引用来自“mickelfeng”的答案 可以,但是服务端能识别不。不知道你用的啥web server。apache有个方法 array apache_response_headers ( void ) 我应该如何做调整呢?. apache. ######袄哦...已经解决.....原来火狐下.看不到 header######snoopy :PHP网络访问类,可以模拟浏览器UA,可以带cookie,可以自定义head,功能完善 $snoopy=new Snoopy(); $snoopy->proxy_host = "www.proxy.com"; $snoopy->proxy_port = "8080"; //这里是UA $snoopy->agent = "(compatible; MSIE 4.01; MSN 2.5; AOL 4.0; Windows 98)"; //这里设置来路 $snoopy->referer = "http://www.baidu.com/"; //这里设置cookie $snoopy->cookies["SessionID"] = 238472834723489l; $snoopy->cookies["favoriteColor"] = "RED"; //这里设置header $snoopy->rawheaders["Pragma"] = "no-cache"; //cache 的http头信息 $snoopy->rawheaders["X_FORWARDED_FOR"] = "127.0.0.101"; //伪装ip <?php /************************************************* * * Snoopy - the PHP net client * Author: Monte Ohrt <monte@ohrt.com> * Copyright (c): 1999-2014, all rights reserved * Version: 2.0.0 * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * You may contact the author of Snoopy by e-mail at: * monte@ohrt.com * * The latest version of Snoopy can be obtained from: * http://snoopy.sourceforge.net/ curl_setopt($ch, CURLOPT_NOSIGNAL, 1); *************************************************/ class Snoopy { /**** Public variables ****/ /* user definable vars */ var $scheme = 'http'; // http or https var $host = "www.php.net"; // host name we are connecting to var $port = 80; // port we are connecting to var $proxy_host = ""; // proxy host to use var $proxy_port = ""; // proxy port to use var $proxy_user = ""; // proxy user to use var $proxy_pass = ""; // proxy password to use var $agent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36"; // agent we masquerade as var $referer = ""; // referer info to pass var $cookies = array(); // array of cookies to pass // $cookies["username"]="joe"; var $rawheaders = array(); // array of raw headers to send // $rawheaders["Content-type"]="text/html"; var $maxredirs = 5; // http redirection depth maximum. 0 = disallow var $lastredirectaddr = ""; // contains address of last redirected address var $offsiteok = true; // allows redirection off-site var $maxframes = 0; // frame content depth maximum. 0 = disallow var $expandlinks = true; // expand links to fully qualified URLs. // this only applies to fetchlinks() // submitlinks(), and submittext() var $passcookies = true; // pass set cookies back through redirects // NOTE: this currently does not respect // dates, domains or paths. var $user = ""; // user for http authentication var $pass = ""; // password for http authentication // http accept types var $accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*"; var $results = ""; // where the content is put var $error = ""; // error messages sent here var $response_code = ""; // response code returned from server var $headers = array(); // headers returned from server sent here var $maxlength = 500000; // max return data length (body) var $read_timeout = 0; // timeout on read operations, in seconds // supported only since PHP 4 Beta 4 // set to 0 to disallow timeouts var $timed_out = false; // if a read operation timed out var $status = 0; // http request status var $temp_dir = "/tmp"; // temporary directory that the webserver // has permission to write to. // under Windows, this should be C:\temp var $curl_path = false; // deprecated, snoopy no longer uses curl for https requests, // but instead requires the openssl extension. // send Accept-encoding: gzip? var $use_gzip = true; // file or directory with CA certificates to verify remote host with var $cafile; var $capath; /**** Private variables ****/ var $_maxlinelen = 4096; // max line length (headers) var $_httpmethod = "GET"; // default http request method var $_httpversion = "HTTP/1.0"; // default http request version var $_submit_method = "POST"; // default submit method var $_submit_type = "application/x-www-form-urlencoded"; // default submit type var $_mime_boundary = ""; // MIME boundary for multipart/form-data submit type var $_redirectaddr = false; // will be set if page fetched is a redirect var $_redirectdepth = 0; // increments on an http redirect var $_frameurls = array(); // frame src urls var $_framedepth = 0; // increments on frame depth var $_isproxy = false; // set if using a proxy server var $_fp_timeout = 30; // timeout for socket connection /*======================================================================*\ Function: fetch Purpose: fetch the contents of a web page (and possibly other protocols in the future like ftp, nntp, gopher, etc.) Input: $URI the location of the page to fetch Output: $this->results the output text from the fetch \*======================================================================*/ function fetch($URI) { $URI_PARTS = parse_url($URI); if (!empty($URI_PARTS["user"])) $this->user = $URI_PARTS["user"]; if (!empty($URI_PARTS["pass"])) $this->pass = $URI_PARTS["pass"]; if (empty($URI_PARTS["query"])) $URI_PARTS["query"] = ''; if (empty($URI_PARTS["path"])) $URI_PARTS["path"] = ''; $fp = null; switch (strtolower($URI_PARTS["scheme"])) { case "https": if (!extension_loaded('openssl')) { trigger_error("openssl extension required for HTTPS", E_USER_ERROR); exit; } $this->port = 443; case "http": $this->scheme = strtolower($URI_PARTS["scheme"]); $this->host = $URI_PARTS["host"]; if (!empty($URI_PARTS["port"])) $this->port = $URI_PARTS["port"]; if ($this->_connect($fp)) { if ($this->_isproxy) { // using proxy, send entire URI $this->_httprequest($URI, $fp, $URI, $this->_httpmethod); } else { $path = $URI_PARTS["path"] . ($URI_PARTS["query"] ? "?" . $URI_PARTS["query"] : ""); // no proxy, send only the path $this->_httprequest($path, $fp, $URI, $this->_httpmethod); } $this->_disconnect($fp); if ($this->_redirectaddr) { /* url was redirected, check if we've hit the max depth */ if ($this->maxredirs > $this->_redirectdepth) { // only follow redirect if it's on this site, or offsiteok is true if (preg_match("|^https?://" . preg_quote($this->host) . "|i", $this->_redirectaddr) || $this->offsiteok) { /* follow the redirect */ $this->_redirectdepth++; $this->lastredirectaddr = $this->_redirectaddr; $this->fetch($this->_redirectaddr); } } } if ($this->_framedepth < $this->maxframes && count($this->_frameurls) > 0) { $frameurls = $this->_frameurls; $this->_frameurls = array(); while (list(, $frameurl) = each($frameurls)) { if ($this->_framedepth < $this->maxframes) { $this->fetch($frameurl); $this->_framedepth++; } else break; } } } else { return false; } return $this; break; default: // not a valid protocol $this->error = 'Invalid protocol "' . $URI_PARTS["scheme"] . '"\n'; return false; break; } return $this; } /*======================================================================*\ Function: submit Purpose: submit an http(s) form Input: $URI the location to post the data $formvars the formvars to use. format: $formvars["var"] = "val"; $formfiles an array of files to submit format: $formfiles["var"] = "/dir/filename.ext"; Output: $this->results the text output from the post \*======================================================================*/ function submit($URI, $formvars = "", $formfiles = "") { unset($postdata); $postdata = $this->_prepare_post_body($formvars, $formfiles); $URI_PARTS = parse_url($URI); if (!empty($URI_PARTS["user"])) $this->user = $URI_PARTS["user"]; if (!empty($URI_PARTS["pass"])) $this->pass = $URI_PARTS["pass"]; if (empty($URI_PARTS["query"])) $URI_PARTS["query"] = ''; if (empty($URI_PARTS["path"])) $URI_PARTS["path"] = ''; switch (strtolower($URI_PARTS["scheme"])) { case "https": if (!extension_loaded('openssl')) { trigger_error("openssl extension required for HTTPS", E_USER_ERROR); exit; } $this->port = 443; case "http": $this->scheme = strtolower($URI_PARTS["scheme"]); $this->host = $URI_PARTS["host"]; if (!empty($URI_PARTS["port"])) $this->port = $URI_PARTS["port"]; if ($this->_connect($fp)) { if ($this->_isproxy) { // using proxy, send entire URI $this->_httprequest($URI, $fp, $URI, $this->_submit_method, $this->_submit_type, $postdata); } else { $path = $URI_PARTS["path"] . ($URI_PARTS["query"] ? "?" . $URI_PARTS["query"] : ""); // no proxy, send only the path $this->_httprequest($path, $fp, $URI, $this->_submit_method, $this->_submit_type, $postdata); } $this->_disconnect($fp); if ($this->_redirectaddr) { /* url was redirected, check if we've hit the max depth */ if ($this->maxredirs > $this->_redirectdepth) { if (!preg_match("|^" . $URI_PARTS["scheme"] . "://|", $this->_redirectaddr)) $this->_redirectaddr = $this->_expandlinks($this->_redirectaddr, $URI_PARTS["scheme"] . "://" . $URI_PARTS["host"]); // only follow redirect if it's on this site, or offsiteok is true if (preg_match("|^https?://" . preg_quote($this->host) . "|i", $this->_redirectaddr) || $this->offsiteok) { /* follow the redirect */ $this->_redirectdepth++; $this->lastredirectaddr = $this->_redirectaddr; if (strpos($this->_redirectaddr, "?") > 0) $this->fetch($this->_redirectaddr); // the redirect has changed the request method from post to get else $this->submit($this->_redirectaddr, $formvars, $formfiles); } } } if ($this->_framedepth < $this->maxframes && count($this->_frameurls) > 0) { $frameurls = $this->_frameurls; $this->_frameurls = array(); while (list(, $frameurl) = each($frameurls)) { if ($this->_framedepth < $this->maxframes) { $this->fetch($frameurl); $this->_framedepth++; } else break; } } } else { return false; } return $this; break; default: // not a valid protocol $this->error = 'Invalid protocol "' . $URI_PARTS["scheme"] . '"\n'; return false; break; } return $this; } /*======================================================================*\ Function: fetchlinks Purpose: fetch the links from a web page Input: $URI where you are fetching from Output: $this->results an array of the URLs \*======================================================================*/ function fetchlinks($URI) { if ($this->fetch($URI) !== false) { if ($this->lastredirectaddr) $URI = $this->lastredirectaddr; if (is_array($this->results)) { for ($x = 0; $x < count($this->results); $x++) $this->results[$x] = $this->_striplinks($this->results[$x]); } else $this->results = $this->_striplinks($this->results); if ($this->expandlinks) $this->results = $this->_expandlinks($this->results, $URI); return $this; } else return false; } /*======================================================================*\ Function: fetchform Purpose: fetch the form elements from a web page Input: $URI where you are fetching from Output: $this->results the resulting html form \*======================================================================*/ function fetchform($URI) { if ($this->fetch($URI) !== false) { if (is_array($this->results)) { for ($x = 0; $x < count($this->results); $x++) $this->results[$x] = $this->_stripform($this->results[$x]); } else $this->results = $this->_stripform($this->results); return $this; } else return false; } /*======================================================================*\ Function: fetchtext Purpose: fetch the text from a web page, stripping the links Input: $URI where you are fetching from Output: $this->results the text from the web page \*======================================================================*/ function fetchtext($URI) { if ($this->fetch($URI) !== false) { if (is_array($this->results)) { for ($x = 0; $x < count($this->results); $x++) $this->results[$x] = $this->_striptext($this->results[$x]); } else $this->results = $this->_striptext($this->results); return $this; } else return false; } /*======================================================================*\ Function: submitlinks Purpose: grab links from a form submission Input: $URI where you are submitting from Output: $this->results an array of the links from the post \*======================================================================*/ function submitlinks($URI, $formvars = "", $formfiles = "") { if ($this->submit($URI, $formvars, $formfiles) !== false) { if ($this->lastredirectaddr) $URI = $this->lastredirectaddr; if (is_array($this->results)) { for ($x = 0; $x < count($this->results); $x++) { $this->results[$x] = $this->_striplinks($this->results[$x]); if ($this->expandlinks) $this->results[$x] = $this->_expandlinks($this->results[$x], $URI); } } else { $this->results = $this->_striplinks($this->results); if ($this->expandlinks) $this->results = $this->_expandlinks($this->results, $URI); } return $this; } else return false; } /*======================================================================*\ Function: submittext Purpose: grab text from a form submission Input: $URI where you are submitting from Output: $this->results the text from the web page \*======================================================================*/ function submittext($URI, $formvars = "", $formfiles = "") { if ($this->submit($URI, $formvars, $formfiles) !== false) { if ($this->lastredirectaddr) $URI = $this->lastredirectaddr; if (is_array($this->results)) { for ($x = 0; $x < count($this->results); $x++) { $this->results[$x] = $this->_striptext($this->results[$x]); if ($this->expandlinks) $this->results[$x] = $this->_expandlinks($this->results[$x], $URI); } } else { $this->results = $this->_striptext($this->results); if ($this->expandlinks) $this->results = $this->_expandlinks($this->results, $URI); } return $this; } else return false; } /*======================================================================*\ Function: set_submit_multipart Purpose: Set the form submission content type to multipart/form-data \*======================================================================*/ function set_submit_multipart() { $this->_submit_type = "multipart/form-data"; return $this; } /*======================================================================*\ Function: set_submit_normal Purpose: Set the form submission content type to application/x-www-form-urlencoded \*======================================================================*/ function set_submit_normal() { $this->_submit_type = "application/x-www-form-urlencoded"; return $this; } /*======================================================================*\ Private functions \*======================================================================*/ /*======================================================================*\ Function: _striplinks Purpose: strip the hyperlinks from an html document Input: $document document to strip. Output: $match an array of the links \*======================================================================*/ function _striplinks($document) { preg_match_all("'<\s*a\s.*?href\s*=\s* # find <a ([\"\'])? # find single or double quote (?(1) (.*?)\\1 | ([^\s\>]+)) # if quote found, match up to next matching # quote, otherwise match up to next space 'isx", $document, $links); // catenate the non-empty matches from the conditional subpattern while (list($key, $val) = each($links[2])) { if (!empty($val)) $match[] = $val; } while (list($key, $val) = each($links[3])) { if (!empty($val)) $match[] = $val; } // return the links return $match; } /*======================================================================*\ Function: _stripform Purpose: strip the form elements from an html document Input: $document document to strip. Output: $match an array of the links \*======================================================================*/ function _stripform($document) { preg_match_all("'<\/?(FORM|INPUT|SELECT|TEXTAREA|(OPTION))[^<>]*>(?(2)(.*(?=<\/?(option|select)[^<>]*>[\r\n]*)|(?=[\r\n]*))|(?=[\r\n]*))'Usi", $document, $elements); // catenate the matches $match = implode("\r\n", $elements[0]); // return the links return $match; } /*======================================================================*\ Function: _striptext Purpose: strip the text from an html document Input: $document document to strip. Output: $text the resulting text \*======================================================================*/ function _striptext($document) { // I didn't use preg eval (//e) since that is only available in PHP 4.0. // so, list your entities one by one here. I included some of the // more common ones. $search = array("'<script[^>]*?>.*?</script>'si", // strip out javascript "'<[\/\!]*?[^<>]*?>'si", // strip out html tags "'([\r\n])[\s]+'", // strip out white space "'&(quot|#34|#034|#x22);'i", // replace html entities "'&(amp|#38|#038|#x26);'i", // added hexadecimal values "'&(lt|#60|#060|#x3c);'i", "'&(gt|#62|#062|#x3e);'i", "'&(nbsp|#160|#xa0);'i", "'&(iexcl|#161);'i", "'&(cent|#162);'i", "'&(pound|#163);'i", "'&(copy|#169);'i", "'&(reg|#174);'i", "'&(deg|#176);'i", "'&(#39|#039|#x27);'", "'&(euro|#8364);'i", // europe "'&a(uml|UML);'", // german "'&o(uml|UML);'", "'&u(uml|UML);'", "'&A(uml|UML);'", "'&O(uml|UML);'", "'&U(uml|UML);'", "'ß'i", ); $replace = array("", "", "\\1", "\"", "&", "<", ">", " ", chr(161), chr(162), chr(163), chr(169), chr(174), chr(176), chr(39), chr(128), "ä", "ö", "ü", "Ä", "Ö", "Ü", "ß", ); $text = preg_replace($search, $replace, $document); return $text; } /*======================================================================*\ Function: _expandlinks Purpose: expand each link into a fully qualified URL Input: $links the links to qualify $URI the full URI to get the base from Output: $expandedLinks the expanded links \*======================================================================*/ function _expandlinks($links, $URI) { preg_match("/^[^\?]+/", $URI, $match); $match = preg_replace("|/[^\/\.]+\.[^\/\.]+$|", "", $match[0]); $match = preg_replace("|/$|", "", $match); $match_part = parse_url($match); $match_root = $match_part["scheme"] . "://" . $match_part["host"]; $search = array("|^http://" . preg_quote($this->host) . "|i", "|^(\/)|i", "|^(?!http://)(?!mailto:)|i", "|/\./|", "|/[^\/]+/\.\./|" ); $replace = array("", $match_root . "/", $match . "/", "/", "/" ); $expandedLinks = preg_replace($search, $replace, $links); return $expandedLinks; } /*======================================================================*\ Function: _httprequest Purpose: go get the http(s) data from the server Input: $url the url to fetch $fp the current open file pointer $URI the full URI $body body contents to send if any (POST) Output: \*======================================================================*/ function _httprequest($url, $fp, $URI, $http_method, $content_type = "", $body = "") { $cookie_headers = ''; if ($this->passcookies && $this->_redirectaddr) $this->setcookies(); $URI_PARTS = parse_url($URI); if (empty($url)) $url = "/"; $headers = $http_method . " " . $url . " " . $this->_httpversion . "\r\n"; if (!empty($this->host) && !isset($this->rawheaders['Host'])) { $headers .= "Host: " . $this->host; if (!empty($this->port) && $this->port != '80') $headers .= ":" . $this->port; $headers .= "\r\n"; } if (!empty($this->agent)) $headers .= "User-Agent: " . $this->agent . "\r\n"; if (!empty($this->accept)) $headers .= "Accept: " . $this->accept . "\r\n"; if ($this->use_gzip) { // make sure PHP was built with --with-zlib // and we can handle gzipp'ed data if (function_exists('gzinflate')) { $headers .= "Accept-encoding: gzip\r\n"; } else { trigger_error( "use_gzip is on, but PHP was built without zlib support." . " Requesting file(s) without gzip encoding.", E_USER_NOTICE); } } if (!empty($this->referer)) $headers .= "Referer: " . $this->referer . "\r\n"; if (!empty($this->cookies)) { if (!is_array($this
爱吃鱼的程序员 2020-06-05 13:05:25 0 浏览量 回答数 0

回答

您收到的此错误: SQLSTATE [HY093]:参数号无效:参数未定义 是因为$values&中的元素数$matches不相同或$matches包含1个以上的元素。 如果$matches包含多个元素,则插入操作将失败,因为query(hash)中仅引用了1个列名 如果$values&$matches不包含相同数量的元素,则由于查询期望x参数,但是插入正在接收y data,因此插入也会失败$matches。 我相信您还需要确保列哈希也具有唯一索引。 在这里尝试代码: getMessage(); } $matches = array('1'); $count = count($matches); for($i = 0; $i < $count; ++$i) { $values[] = '?'; } // INSERT INTO DATABASE $sql = "INSERT INTO hashes (hash) VALUES (" . implode(', ', $values) . ") ON DUPLICATE KEY UPDATE hash='hash'"; $stmt = $dbh->prepare($sql); $data = $stmt->execute($matches); //Error reporting if something went wrong... var_dump($dbh->errorInfo()); ?> 您将需要对其稍作调整。 我使用的表结构在这里: CREATE TABLE IF NOT EXISTS hashes ( hashid int(11) NOT NULL AUTO_INCREMENT, hash varchar(250) NOT NULL, PRIMARY KEY (hashid), UNIQUE KEY hash1 (hash) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; 代码在我的XAMPP服务器上运行,该服务器使用PHP 5.3.8和MySQL 5.5.16。 我希望这有帮助。来源:stack overflow
保持可爱mmm 2020-05-10 22:20:50 0 浏览量 回答数 0

问题

如何将数组插入带有PHP和PDO的单个MySQL Prepared语句中?mysql

在线注册期间,客户可以选择他们选择注册的许多程序。这些程序是三位数的整数,并存储在数组中。 例如: 我想注册Programid 155、165、175和185。 我的数组设置很简单࿱...
保持可爱mmm 2020-05-17 21:44:14 2 浏览量 回答数 1

回答

Pandas是Python的一个大数据处理模块。Pandas使用一个二维的数据结构DataFrame来表示表格式的数据,相比较于Numpy,Pandas可以存储混合的数据结构,同时使用NaN来表示缺失的数据,而不用像Numpy一样要手工处理缺失的数据,并且Pandas使用轴标签来表示行和列。 DataFrame类: DataFrame有四个重要的属性: index:行索引。 columns:列索引。 values:值的二维数组。 name:名字。 构建方法,DataFrame(sequence),通过序列构建,序列中的每个元素是一个字典。 frame=DateFrame构建完之后,假设frame中有’name’,’age’,’addr’三个属性,可以使用fame[‘name’]查看属性列内容,也可以fame.name这样直接查看。 frame按照’属性提取出来的每个列是一个Series类。 DataFrame类可以使用布尔型索引。 groupby(str|array…)函数:可以使用frame中对应属性的str或者和frame行数相同的array作为参数还可以使用一个会返回和frame长度相同list的函数作为参数,如果使用函数做分组参数,这个用做分组的函数传入的参数将会是fame的index,参数个数任意。使用了groupby函数之后配合,size()函数就可以对groupby结果进行统计。 groupby后可以使用: size():就是count sum():分组求和 apply(func,axis=0):在分组上单独使用函数func返回frame,不groupby用在DataFrame会默认将func用在每个列上,如果axis=1表示将func用在行上。 reindex(index,column,method):用来重新命名索引,和插值。 size():会返回一个frame,这个frame是groupby后的结果。 sum(n).argsort():如果frame中的值是数字,可以使用sum函数计算frame中摸个属性,各个因子分别求和,并返回一个Series,这个Series可以做为frame.take的参数,拿到frame中对应的行。 pivot_table(操作str1,index=str2,columns=str3,aggfunc=str4)透视图函数: str1:是给函数str4作为参数的部分。 str2:是返回frame的行名。 str3:是返回frame的列名。 str4:是集合函数名,有’mean’,’sum’这些,按照str2,str3分组。 使用透视图函数之后,可以使用.sum()这类型函数,使用后会按照index和columns的分组求和。 order_index(by,ascending): 返回一个根据by排序,asceding=True表示升序,False表示降序的frame concat(list):将一个列表的frame行数加起来。 ix[index]:就是行索引,DataFrame的普通下标是列索引。 take(index):作用和ix差不多,都是查询行,但是ix传入行号,take传入行索引。 unstack():将行信息变成列信息。 apply(func,axis=0)和applymap(func):apply用在DataFrame会默认将func用在每个列上,如果axis=1表示将func用在行上。applymap表示func用在每个元素上。 combine_first(frame2):combine_first会把frame中的空值用frame1中对应位置的数据进行填充。Series方法也有相同的方法。 stack()函数,可以将DataFrame的列转化成行,原来的列索引成为行的层次索引。(stack和unstack方法是两个互逆的方法,可以用来进行Series和DataFrame之间的转换) duplicated():返回一个布尔型Series,表示各行是否重复。 drop_duplicates():返回一个移除了重复行后的DataFrame pct_change():Series也有这个函数,这个函数用来计算同colnums两个相邻的数字之间的变化率。 corr():计算相关系数矩阵。 cov():计算协方差系数矩阵。 corrwith(Series|list,axis=0):axis=0时计算frame的每列和参数的相关系数。 数据框操作 df.head(1) 读取头几条数据 df.tail(1) 读取后几条数据 df[‘date’] 获取数据框的date列 df.head(1)[‘date’] 获取第一行的date列 df.head(1)‘date’ 获取第一行的date列的元素值 sum(df[‘ability’]) 计算整个列的和 df[df[‘date’] == ‘20161111’] 获取符合这个条件的行 df[df[‘date’] == ‘20161111’].index[0] 获取符合这个条件的行的行索引的值 df.iloc[1] 获取第二行 df.iloc1 获取第二行的test2值 10 mins to pandas df.index 获取行的索引 df.index[0] 获取第一个行索引 df.index[-1] 获取最后一个行索引,只是获取索引值 df.columns 获取列标签 df[0:2] 获取第1到第2行,从0开始,不包含末端 df.loc[1] 获取第二行 df.loc[:,’test1’] 获取test1的那一列,这个冒号的意思是所有行,逗号表示行与列的区分 df.loc[:,[‘test1’,’test2’]] 获取test1列和test2列的数据 df.loc[1,[‘test1’,’test2’]] 获取第二行的test1和test2列的数据 df.at[1,’test1’] 表示取第二行,test1列的数据,和上面的方法类似 df.iloc[0] 获取第一行 df.iloc[0:2,0:2] 获取前两行前两列的数据 df.iloc[[1,2,4],[0,2]] 获取第1,2,4行中的0,2列的数据 (df[2] > 1).any() 对于Series应用any()方法来判断是否有符合条件的
世事皆空 2019-12-02 01:07:19 0 浏览量 回答数 0

问题

SQLite-数据库库

您可以通过解决缺少的列来解决问题吗?在我看来,我所做的一切都正确,但是我得到一个错误,那就是一栏有问题。 错误 E / SQLiteLog:(1...
LiuWH 2020-01-12 11:08:45 1 浏览量 回答数 1

回答

避免并发症的简单方法是这样的 $stmt = $pdo->prepare('INSERT INTO foo VALUES(:a, :b, :c)'); foreach($data as $item) { $stmt->bindValue(':a', $item[0]); $stmt->bindValue(':b', $item[1]); $stmt->bindValue(':c', $item[2]); $stmt->execute(); } 但是,这将多次执行该语句。因此,最好创建一个较长的单个查询来执行此操作。 这是我们如何执行此操作的示例。 $query = "INSERT INTO foo (key1, key2) VALUES "; //Prequery $qPart = array_fill(0, count($data), "(?, ?)"); $query .= implode(",",$qPart); $stmt = $dbh -> prepare($query); $i = 1; foreach($data as $item) { //bind the values one by one $stmt->bindValue($i++, $item['key1']); $stmt->bindValue($i++, $item['key2']); } $stmt -> execute(); //execute来源:stack overflow
保持可爱mmm 2020-05-17 20:30:54 0 浏览量 回答数 0

回答

数据采集链接 检查数据 首先检查“ex1data1”文件中的数据。“txt”在“我的存储库”的“数据”目录中。首先导入一些库。 import os import numpy as np import pandas as pd import matplotlib.pyplot as plt %matplotlib inline 现在开始运行,使用Pandas把数据加载到数据帧里,并且使用“head”函数显示前几行。 path= os.getcwd()+ '\data\ex1data1.txt' data= pd.read_csv(path, header=None, names=['Population','Profit']) data.head() Population Profit 0 6.1101 17.5920 1 5.5277 9.1302 2 8.5186 13.6620 3 7.0032 11.8540 4 5.8598 6.8233 Pandas提供的另外一个有用的函数是”describe”函数,它能在数据集上计算一些基本统计数据,这有助于在项目的探索性分析阶段获得数据的“feel”。 data.describe() Population Profit count 97.000000 97.000000 mean 8.159800 5.839135 std 3.869884 5.510262 min 5.026900 -2.680700 25% 5.707700 1.986900 50% 6.589400 4.562300 75% 8.578100 7.046700 max 22.203000 24.147000 检查有相关的统计数据可能会有帮助,但有时需要找到方法使它可视化。这个数据集只有一个因变量,我们可以把它放到散点图中以便更好地了解它。我们可以使用pandas为它提供的“plot”函数,这实际上只是matplotlib的一个包装器。 data.plot(kind='scatter', x='Population', y='Profit', figsize=(12,8)) 我们可以清楚地看到,随着城市规模的增加,利润呈线性增长。现在让我们进入有趣的部分——从零开始实现python中的线性回归算法。 实现简单的线性回归 线性回归是建立因变量和一个或多个自变量之间关系的一种方法(如果只有一个自变量就是简单线性回归;如果是多个自变量就是多重线性回归)。我们试图使用参数theta创建数据X的线性模型,它描述了数据的方差,给出新的数据点,我们可以在不知道实际结果的情况下准确地预测。 在实现过程中,我们使用叫做梯度下降的优化技术寻找参数theta。如果你熟悉线性回归,你可能会意识到有另一种方法可以找到线性模型的最优参数,就是做“正态方程”,它可以用一系列矩阵运算来解决这个问题。然而,这种方法的问题就是在大数据集中不能很好地扩展,相比之下,我们可以使用梯度下降和其他优化方法的变体来扩展到无限大小的数据集,因此对于机器学习问题,梯度下降更实用。 理论知识已经足够了,下面我们写一些代码。我们首先要写的就是成本函数,成本函数通过计算模型参数和实际数据点之间的误差来计算模型预测的误差,从而评估模型的质量。例如,如果给定城市的人口数量是4,但是我们预测是7,我们的误差就是 (7-4)^2 = 3^2 = 9(假设为L2或“最小二乘法”损失函数)。我们为X中的每个数据点执行此操作,并对结果求和以获取成本。下面是函数: def computeCost(X, y, theta): inner= np.power(((X* theta.T)- y),2) return np.sum(inner)/ (2 * len(X)) 注意,这里没有循环。我们利用numpy的linear algrebra功能将结果计算为一系列矩阵运算。这比不优化的“for”循环的效率要高得多。 为了使这个成本函数与我们上面创建的pandas数据框架无缝对接,我们需要做一些操作。首先,在开始插入一列1s的数据帧使矩阵运算正常工作。然后把数据分离成自变量X和因变量y。 # append a ones column to the front of the data set data.insert(0,'Ones',1) # set X (training data) and y (target variable) cols= data.shape[1] X= data.iloc[:,0:cols-1] y= data.iloc[:,cols-1:cols] 最后把数据框架转换为numpy矩阵并实例化参数matirx。 # convert from data frames to numpy matrices X= np.matrix(X.values) y= np.matrix(y.values) theta= np.matrix(np.array([0,0])) 在调试矩阵运算时要查看正在处理的矩阵的形状。矩阵乘法看起来像(i x j)*(j x k)=(i x k),其中i、j和k是矩阵相对维度的形状。 X.shape, theta.shape, y.shape ((97L, 2L), (1L, 2L), (97L, 1L)) 调试一下成本函数。参数已经被初始化为0,所以解不是最优的,但是我们可以看看它是否有效。 computeCost(X, y, theta) 32.072733877455676 目前为止一切都很顺利。现在我们需要使用练习文本中定义的更新规则来定义一个函数,来对参数theta执行梯度下降。这是梯度下降的函数: def gradientDescent(X, y, theta, alpha, iters): temp= np.matrix(np.zeros(theta.shape)) parameters= int(theta.ravel().shape[1]) cost= np.zeros(iters) for iin range(iters): error= (X* theta.T)- y for jin range(parameters): term= np.multiply(error, X[:,j]) temp[0,j]= theta[0,j]- ((alpha/ len(X))* np.sum(term)) theta= temp cost[i]= computeCost(X, y, theta) return theta, cost 梯度下降的就是计算出每一个迭代的误差项的梯度,以找出适当的方向来移动参数向量。换句话说,就是计算对参数的修改以减少错误,从而使我们的解决方案更接近最佳解决方案。 我们再一次依赖于numpy和线性代数求解,你可能注意到我的实现不是100%的优化,事实上,有完全去除内循环和一次性更新所有参数的方法。我把它留给读者去完成。 现在我们已经有了一种评估解决方案的方法,并且找到一个好的解决方案,把它应用到我们的数据集中。 # initialize variables for learning rate and iterations alpha= 0.01 iters= 1000 # perform gradient descent to "fit" the model parameters g, cost= gradientDescent(X, y, theta, alpha, iters) g 矩阵x([[-3.24140214, 1.1272942 ]]) 注意我们已经初始化了一些新的变量。梯度下降函数中有叫做alpha和iters的参数。alpha是学习速率-它是参数更新规则中的一个因素,它帮助决定算法收敛到最优解的速度。iters是迭代次数。没有严格的规则去规定如何初始化这些参数,但是通常会涉及到试错法。 现在有一个参数向量描述数据集的最优线性模型,一个快速评估回归模型的方法就是观察数据集上的解决方案的总误差: computeCost(X, y, g) 4.5159555030789118 这要比32好很多。 查看结果 我们将使用matplotlib来可视化我们的解决方案。我们在数据的散点图上覆盖一条线表示我们的模型,看它是否合适。我们使用numpy的“linspace”函数在我们的数据范围内创建一系列均匀间隔的点,然后用我们的模型“评估”这些点,看预期的利润会是多少。我们把它变成线形图。 x= np.linspace(data.Population.min(), data.Population.max(),100) f= g[0,0]+ (g[0,1]* x) fig, ax= plt.subplots(figsize=(12,8)) ax.plot(x, f,'r', label='Prediction') ax.scatter(data.Population, data.Profit, label='Traning Data') ax.legend(loc=2) ax.set_xlabel('Population') ax.set_ylabel('Profit') ax.set_title('Predicted Profit vs. Population Size') 我们的解决方案看起来是数据集的最优线性模型。梯度体系函数会在每个训练迭代中输出一个成本向量,我们可以出绘制出线形图。 fig, ax = plt.subplots(figsize=(12,8)) ax.plot(np.arange(iters), cost, 'r') ax.set_xlabel('Iterations') ax.set_ylabel('Cost') ax.set_title('Error vs. Training Epoch') 成本一直在降低——这就是凸优化问题的一个示例。如果你要绘制问题的整个解决方案空间,它看起来会像一个碗的形状,“盆地”表示最优解。
珍宝珠 2019-12-02 03:22:32 0 浏览量 回答数 0

问题

以链接列表的形式构建字典并出现分段错误(核心转储)错误

我知道分段错误(核心转储)错误是因为我试图访问我无权访问的内存,但我不明白为什么它会对我的程序造成影响。我确定问题出在printList(node *head)函数上,但我不明白为什么...
kun坤 2019-12-01 22:06:53 3 浏览量 回答数 1

云产品推荐

上海奇点人才服务相关的云产品 小程序定制 上海微企信息技术相关的云产品 国内短信套餐包 ECS云服务器安全配置相关的云产品 开发者问答 阿里云建站 自然场景识别相关的云产品 万网 小程序开发制作 视频内容分析 视频集锦 代理记账服务