0

最後の 3 文字が に等しい場合、どのように削除でき"01x"ますか?

たとえば、私はこれを持っています:

$stuff = array(
    "aaaaa01x",
    "aaaaa1",
    "aaaaa01x",
    "aaaaa01",
    "aaaaa01",
    "aaaaa01x"
    "aaaaa11"
);

出力しようとしています:

$stuff = array(
    "aaaaa", // trimmed
    "aaaaa1",
    "aaaaa", // trimmed
    "aaaaa01",
    "aaaaa01",
    "aaaaa", // trimmed
    "aaaaa11"
);

を使用してこれを実行しようとすると問題が発生しました。これは、3 つの文字のいずれかで終わる文字列が削除されるtrim()ためです。trim()

たとえば、これらの文字で終わる任意の文字列から, ,trim($string, '01x');を削除します。文字列が「01x」で終わる場合にのみトリミングしたい。"1""0""x"

4

4 に答える 4

2
$stuff = array(
    "aaaaa01x",
    "aaaaa1",
    "aaaaa01x",
    "aaaaa01",
    "aaaaa01",
    "aaaaa01x",
    "aaaaa11"
);

for($i = 0; $i < count($stuff); $i ++)
{
    $stuff[$i] = (substr($stuff[$i], -3) == '01x' ? substr($stuff[$i], 0, -3) : $stuff[$i]);    
}
于 2013-09-02T23:11:15.073 に答える
1

コード:

$stuff = array(
    "aaaaa01x",
    "aaaaa1",
    "aaaaa01x",
    "aaaaa01",
    "aaaaa01",
    "aaaaa01x",
    "aaaaa11"
);

foreach($stuff as $key => $thing) {
   if(substr($thing, -3, 3) == '01x')
      $stuff[$key] = trim($thing, '01x');
}

var_dump($stuff);

出力:

array(7) {
   [0]=> string(5) "aaaaa"
   [1]=> string(6) "aaaaa1"
   [2]=> string(5) "aaaaa"
   [3]=> string(7) "aaaaa01"
   [4]=> string(7) "aaaaa01"
   [5]=> string(5) "aaaaa"
   [6]=> string(7) "aaaaa11"
}
于 2013-09-02T23:11:42.090 に答える
1

配列をループで実行し、新しい配列を作成します。

$i = 0;
foreach($stuff as $s){
$stuff[$i] = preg_replace('/01x$/', '', $s);
$i++;
}
于 2013-09-02T23:14:53.910 に答える
0

strrpos()検索文字列の最後の位置を見つけるために使用できます。

$stuff = array(
    "aaaaa01x",
    "aaaaa1",
    "aaaaa01x",
    "aaaaa01",
    "aaaaa01",
    "aaaaa01x",
    "aaaaa11"
);

for ($i = 0; $i < count($stuff); $i++) {
    if (($pos = strrpos($stuff[$i], '01x')) !== FALSE) {
        $stuff[$i] = substr($stuff[$i], 0, $pos);
    }
}

print_r($stuff);
于 2013-09-02T23:29:40.797 に答える