たとえば、次のようなPHP関数が実行されるときに、すべての数値を文字列ではなく整数に強制するにはどうすればよいですか? array_replace()
?ここに例があります:
じぶんの $item
デフォルト値の配列であり、 var_dump($item)
これを生成します:
array (size=12)
"id" => string "" (length=0)
"cid" => int 2
"pid" => string "" (length=0)
"rid" => string "" (length=0)
"section" => int 0
"title" => string "" (length=0)
"slug" => string "" (length=0)
"image" => string "" (length=0)
"description" => string "" (length=0)
"ordering" => string "" (length=0)
"created" => string "" (length=0)
"modified" => string "" (length=0)
次に、関数を呼び出して更新します $item
関数を持つdbから来る新しい値を持つ配列 array_replace($item, $item_db);
、そして私が var_dump($item)
繰り返しますが、私はこれを取得します:
array (size=12)
"id" => string "12" (length=2)
"cid" => string "1" (length=1)
"pid" => string "0" (length=1)
"rid" => string "37" (length=2)
"section" => string "0" (length=1)
"title" => string "Article2" (length=8)
"slug" => string "articles123" (length=11)
"image" => string "e9213e52d235bd892b3337fce3172bed.jpg" (length=36)
"description" => string "" (length=0)
"ordering" => string "3" (length=1)
"created" => string "2014-05-15 14:51:10" (length=19)
"modified" => string "2014-05-15 23:29:40" (length=19)
すべて数値になりたい(id, cid, pid, rid, section, ordering
)を除く整数 created
そして modified
キー。
毎回次のようなものを手動で書かずにそれを行うと私がどのように想定するか:
$item["section"] = (int) $item["section"];
これに対する解決策はありますか?
回答:
回答№1の場合は3このような単純なforeachループを使用できます。
foreach ($array as $k => $v) {
if ($k != "created" && $k != "modified") {
$array[$k] = (int) $v;
}
}
もちろん、これは、すべての値が整数であり、intに変換できることが確実な場合です。それ以外の場合は、以下を使用する必要があります。
foreach ($item as $k => $v) {
if (is_numeric($v)) {
$item[$k] = (int) $v;
}
}
回答№2の場合は1
名前を変更したくない値を含む配列を作成します。次に、配列をループします—反復ごとに、現在のキーが $defaults
アレイ。そうでない場合は、新しい配列にプッシュします($results
)現在の数値オフセットをキーとして使用します。そうでない場合は、現在のキーを使用して新しいアレイにプッシュします。
次の行に沿った何か:
$defaults = ["created", "modified"]; // Keys to be left untouched
$result = []; // Results array
$i = 0; // Numeric offset
foreach ($array as $key => $value) {
if (!in_array($key, $defaults)) {
$result[++$i] = $value;
} else {
$result[$key] = $value;
}
}
print_r($result);