5

PHP に配列があり、この配列からいくつかの要素を削除する際に問題があります。次のようになります。

Array
(
    [0] => 2x 633130A
    [1] => 2x 525130B
    [2] => 2x 591130B
    [3] => 2x 963130B
    [4] => 2x 813130B (20mm)
    [5] => 2x 813130B
    [6] => 2x 313130B (12mm)
    [7] => 2x 313130B
    [8] => 4x 413130B
    [9] => 2x 633130B
    [12] => 2x 381130A (23mm)
    [13] => 2x 381130A
)

そして、以下に示すように、 mmパラメータを使用せずにこの繰り返し要素を削除したいと思います。

    FROM                =====>              TO          

Array                                   Array
(                                       (
    [0] => 2x 633130A                   [0] => 2x 633130A       
    [1] => 2x 525130B                   [1] => 2x 525130B
    [2] => 2x 591130B                   [2] => 2x 591130B
    [3] => 2x 963130B                   [3] => 2x 963130B
    [4] => 2x 813130B (20mm)            [4] => 2x 813130B (20mm)
    [5] => 2x 813130B <= REMOVE         [5] => 2x 313130B (12mm)
    [6] => 2x 313130B (12mm)            [6] => 4x 413130B
    [7] => 2x 313130B <= REMOVE         [7] => 2x 633130B
    [8] => 4x 413130B                   [8] => 2x 381130A (23mm)
    [9] => 2x 633130B                   )       
    [12] => 2x 381130A (23mm)                   
    [13] => 2x 381130A <= REMOVE
)

要素がまったく同じではないため、この場合、 array_unique は機能しませんでしたこれらの繰り返される要素を削除する方法を誰か助けてもらえますか?

4

3 に答える 3

2

これは、この場合に必要なことを行います:

  foreach ($array as $value)
  {

    if (FALSE !== strpos($value, '('))
    {

      $string = trim(strtok($value, '('));

      while (FALSE !== $key = array_search($string, $array))
      {
        unset($array[$key]);
      }

    }

  }

配列を反復処理し、文字列の一部として a を持つ要素を見つけ、 (余分な空白を削除して) に(一致する文字列を持つ要素を見つけ、見つかった場合は削除します。(

于 2013-03-11T22:01:53.937 に答える
1
$initialData = array(
    '2x 633130A',
    '2x 525130B',
    '2x 591130B',
    '2x 963130B',
    '2x 813130B (20mm)',
    '2x 813130B',
    '2x 313130B (12mm)',
    '2x 313130B',
    '4x 413130B',
    '2x 633130B',
    '2x 381130A (23mm)',
    '2x 381130A',
);

$filteredArray = array_filter(
    $initialData,
    function($value) use ($initialData) {
        if (strpos($value, 'mm') === FALSE) {
            foreach($initialData as $testData) {
                if (strlen($testData) > strlen($value) && 
                    substr($testData,0,strlen($value)) == $value) {
                    return FALSE;
                }
            }
        }
        return TRUE;
    }
);

var_dump($filteredArray);
于 2013-03-11T22:02:06.487 に答える
1

を使用してカスタム関数を作成しましたpreg_match()

$array = array
(
    0 => '2x 633130A',
    1 => '2x 525130B',
    2 => '2x 591130B',
    3 => '2x 963130B',
    4 => '2x 813130B (20mm)',
    5 => '2x 813130B',
    6 => '2x 313130B (12mm)',
    7 => '2x 313130B',
    8 => '4x 413130B',
    9 => '2x 633130B',
    12 => '2x 381130A (23mm)',
    13 => '2x 381130A'
);

$results = array();
foreach($array as $element){
    if(!custom_exists($array, $element)){
        $results[] = $element;
    }
}

print_r($results);

function custom_exists($array, $val){
    foreach($array as $element){
        if($element != $val && preg_match("/$val/", $element)){
            return true;
        }
    }
    return false;
}
于 2013-03-11T22:05:00.907 に答える