【问题标题】:How can I add a : to the beginning of the first array key when the first array key is unknown?当第一个数组键未知时,如何将 : 添加到第一个数组键的开头?
【发布时间】:2011-12-03 00:15:02
【问题描述】:

我正在尝试将类属性动态添加到 PDO 准备语句中。为此,我需要创建一个数组,该数组将从类中获取属性,将它们放入一个数组中,然后在每个键的开头添加一个 :。然后,用逗号分隔每个键。我最接近的方法是使用:

foreach ($property as $field)
   $propertyValues = implode(", :", array_keys($property));
return $propertyValues;
}  

这给了我
用户名,:密码

我只需要一种方法将 : 添加到第一个键,在这种情况下是用户名。所以它看起来像

:用户名,:密码

但是请记住,我正在尝试使这个动态化,以便我可以将其功能扩展到其他类,而且我并不总是知道第一个数组键是什么。

如果你有兴趣阅读整节课,这里是:

<?php 
require_once("../config/main.php");

class Database{

protected static $dbFields = array('username', 'password');
public $dbConnection;
public $tableName = 'users';
public $id;
public $username;
public $password;
public function __construct() {
$this->connect();
}

public function connect(){
try {
$this->dbConnection = new PDO("mysql:host=".DB_SERVER."; dbname=".DB_NAME, DB_USER,  DB_PASS);

} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
}
public function properties() {
$properties = array();
foreach (self::$dbFields as $field) {
    if (isset($this->field) || property_exists($this, $field)) {
        $properties[$field] = $this->$field;
    }
}
return $properties;
}

public function property_values() {  

$property = $this->properties();

    $propertyValues = implode(", :", array_keys($property));

return $propertyValues;
}

public function insert(){
    // this is where all the is going to happen. it's a work in progress
// $sql  = "INSERT INTO". $this->tableName. " (";
// $sql .= implode(", ",array_keys($this->properties()));
// $sql .= ")VALUES(". ;


// $q = $this->db->prepare($sql);
// $q->execute(array('John', 'hula'));
}


}

$database = new Database();
$vals = $database->property_values();
print_r($vals);

?>

【问题讨论】:

    标签: php arrays pdo


    【解决方案1】:
    $propertyValues = ':'. implode(", :", array_keys($property));
    

    【讨论】:

      【解决方案2】:

      要获取第一个数组键,可以使用万无一失:

      reset($array);
      $firstkey = key($array);
      

      由于你还需要值(不能更改密钥,只能取消设置旧的并设置一个新的),你可以使用:

      $value = reset($array);
      $firstkey = key($array);
      unset($array[$firstkey]);
      $array[':'.$firstkey] = $value;
      

      然而

      这并不是最干净的方法。正如经常发生的那样,当实际上有更清洁的方法可用时,您已经开始专注于调整“您的”工作方法。

      一种方法:

      $keys = array_map(function($key) { return ':'.$key; }, array_keys($property));
      $property = array_combine($keys, $property);
      

      现在所有属性名称前面都添加了':'。

      另一种方法是手动添加一个 ':'; webbiedave 打败了我。

      【讨论】:

      • 好的,然后我将 : 连接到密钥。我如何让它回到同一个数组中的第一个位置?
      猜你喜欢
      • 2011-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-22
      • 2019-09-02
      • 1970-01-01
      • 2012-06-05
      相关资源
      最近更新 更多