第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將 PHP 字符串中的重復值替換為零

將 PHP 字符串中的重復值替換為零

PHP
慕無忌1623718 2023-10-15 14:50:50
以下是代碼<?php$id ="202883-202882-202884-0";$str = implode('-',array_unique(explode('-', $id)));echo $str;?>結果是202883-202882-202884-0對于$id ="202883-202882-202882-0";,結果是202883-202882-0我想用零替換重復值,以便結果應該像202883-202882-0-0,而不僅僅是刪除它。對于$id ="202883-0-0-0";,結果應該是202883-0-0-0。不應替換零,允許重復零。我怎樣才能存檔它?更多信息:我想替換每個重復的數(shù)字。因為這是一個產(chǎn)品比較網(wǎng)站。最多只有 4 個號碼。每個都是 6 位數(shù)字或一位數(shù)零。全零表示未選擇任何產(chǎn)品。1 個 6 位數(shù)字和 3 個零表示,1 個產(chǎn)品已選擇,3 個空白。每個 6 位數(shù)字都會從數(shù)據(jù)庫收集數(shù)據(jù),我不想允許用戶多次輸入相同的數(shù)字(只有手動添加 URL 時才會發(fā)生)。更新:我知道我的問題不清楚,可能是我的英語很差。這里有更多解釋,這個功能是針對智能手機比較網(wǎng)站的。網(wǎng)址格式為sitename.com/compare.html?id=202883-202882-202889-202888. 這三個數(shù)字都是不同的智能手機(它們的數(shù)據(jù)庫產(chǎn)品 ID)。我不想讓用戶輸入相同的產(chǎn)品 ID,例如id=202883-202882-202882-202888. 它不會在網(wǎng)站中顯示兩個202882結果,但會引起一些小問題。URL 將保持不變,但內部 PHP 代碼應將其視為id=202883-202882-202888-0. 重復項應替換為零并添加到末尾。只有 4 個數(shù)字,以“-”分隔。下面的例子或許可以解開疑云!如果pid=202883-202882-202889-202888結果應該是202883-202882-202889-202888 如果pid=202883-202883-202883-202888結果應該是202888-0-0-0 如果pid=202883-202882-202883-202888結果應該是202883-202882-202888-0 如果pid=202882-202882-202882-202882結果應該是202882-0-0-0我只想允許字符串中包含 6 位數(shù)字或單個數(shù)字零。如果pid=rgfsdg-fgsdfr4354-202883-0結果應該是202883-0-0-0 如果pid=fasdfasd-asdfads-adsfds-dasfad結果應該是0-0-0-0 如果pid=4354-45882-445202882-202882結果應該是202882-0-0-0它對我來說太復雜了,我知道有一些聰明的人可以比我更有效地完成它。
查看完整描述

3 回答

?
Qyouu

TA貢獻1786條經(jīng)驗 獲得超11個贊

您可以執(zhí)行 array_unique (保留鍵),然后用0.?按鍵排序就完成了:)

+在數(shù)組上將是unify數(shù)組,但優(yōu)先考慮左側的數(shù)組。

代碼

$input = "0-1-1-3-1-1-3-5-0";

$array = explode('-', $input);

$result = array_unique($array) + array_fill(0, count($array), 0);

ksort($result);


var_dump(implode('-',$result));

代碼(v2 - 由 micmackusa 建議) - 更短且更易于理解


填充輸入數(shù)組大小的數(shù)組。并替換為 中的剩余值array_unique。不需要ksort。0s 將被替換為 的保留鍵array_unique。


$input = "0-1-1-3-1-1-3-5-0";

$array = explode('-', $input);

$result = array_replace(array_fill(0, count($array), 0), array_unique($array));

var_export($result);

工作

工作示例。

參考

  • ksort?- 按鍵排序

  • array_fill?- 生成一個填充0一定長度的數(shù)組


查看完整回答
反對 回復 2023-10-15
?
慕尼黑8549860

TA貢獻1818條經(jīng)驗 獲得超11個贊

這是另一種方法。


$id = "202883-202882-202882-0-234567-2-2-45435";

從字符串中,您根據(jù)分隔符將字符串分解為數(shù)組,在本例中為“-”/


$id_array = explode('-', $id);

然后我們可以循環(huán)遍歷該數(shù)組,對于找到的每個唯一條目,我們可以將其存儲在另一個數(shù)組中。因此,當我們搜索數(shù)組時,我們正在構建一個數(shù)組。


$id_array_temp = [];

// Loop through the array

foreach ($id_array as $value) {

    if ( in_array($value, $id_array_temp)) {

        // If the entry exists, replace it with a 0

        $id_array_temp[] = 0;

    } else {

        // If the entry does not exist, save the value so we can inspect it on the next loop.

        $id_array_temp[] = $value;

    }

}

在此操作結束時,我們將得到一個唯一值數(shù)組,其中任何重復項都將替換為 0。


要重新創(chuàng)建字符串,我們可以使用 implode...


$str = implode('-', $id_array_temp);

echo $str;

重構這個,使用三元來代替 If,else...


$id_array = explode('-', $id);

$id_array_temp = [];

foreach ($id_array as $value) {

    $id_array_temp[] = in_array($value, $id_array_temp) ? 0 : $value;

}

$str = implode('-', $id_array_temp);

echo $str;

輸出是


202883-202882-0-0-234567-2-0-45435


查看完整回答
反對 回復 2023-10-15
?
叮當貓咪

TA貢獻1776條經(jīng)驗 獲得超12個贊

這似乎是一個經(jīng)典的XY 問題。

基本行動只需:

  1. 用連字符分隔字符串中的子字符串。

  2. 驗證每個子字符串中的字符格式正確并且對于該集合是唯一的。

  3. 僅對合格值采取有意義的行動。

您會看到,當您只真正需要驗證輸入數(shù)據(jù)時,替換/清理任何內容都沒有任何好處。在輸入中添加零只會在以后產(chǎn)生更多工作。

簡而言之,您應該使用類似于此流程的直接方法:

if (!empty($_GET['id'])) {

? ? $ids = array_unique(explode('-', $_GET['id']));

? ? foreach ($ids as $id) {

? ? ? ? if (ctype_digit($id) && strlen($id) === 6) {

? ? ? ? // or: if (preg_match('~^\d{6}$~', $id)) {

? ? ? ? ? ? takeYourNecessaryAction($id);

? ? ? ? }

? ? }

}


查看完整回答
反對 回復 2023-10-15
  • 3 回答
  • 0 關注
  • 151 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號