0

我有以下数组。

$arr = array('foo','bar','foo-bar','abc','def','abc-def','ghi','abc-def-ghi');

我得到了一个新字符串来决定是否添加到数组中。如果字符串已经在数组中,则不要添加它。如果它不在当前形式的数组中,而是在一个翻转的单词形式中找到,则不要添加它。

我应该如何做到这一点?

例子:

'foo'     —->  N  - Do NOT add, already found
'xyz'     —->  Y  - Add, this is new
'bar-foo' —->  N  - Do NOT add, already found in the flipped form 'foo-bar'
'ghi-jkl' —->  Y  - Add, this is new

你有什么建议吗?

4

2 回答 2

1

这是您可以尝试的一种方法的建议...

对于 $arr 中的每个字符串,将其反转为 push 到另一个名为 $rev_arr 的数组中

然后...

$new_array = array();

foreach ($arr as $arr_1) $new_array[$arr_1] = true; // just set something

foreach ($rev_arr as $arr_2) $new_array[$arr_2] = true; // do also for reverse

现在您可以根据

if ( isset($new_arr[ $YOUR_TEST_VARIABLE_HERE ]) ) { // match found
}
于 2013-08-24T00:45:38.997 回答
1

如果要排除其元素('abc'、'ghi' 等)包含在另一个顺序中且不仅反转的项目,您可以执行以下操作:

$arr = array('foo','bar','foo-bar','abc','def','abc-def','ghi','abc-def-ghi');

function split_and_sort($str) {
    $partsA = explode('-', $str);
    sort($partsA);
    return $partsA;
}
$arr_parts = array_map('split_and_sort', $arr);

$tests = array('foo','xyz','bar-foo','ghi-jkl');
$tests_parts = array_map('split_and_sort', $tests);

foreach($tests_parts as $test) {
    if( !in_array($test, $arr_parts)) {
        echo "adding: " . join('-', $test) . "\n";
        $arr[] = join('-', $test);
    }
    else {
        echo "skipping: " . join('-', $test) . "\n";
    }
}
var_export($arr);

输出:

skipping: foo
adding: xyz
skipping: bar-foo
adding: ghi-jkl
array (
  0 => 'foo',
  1 => 'bar',
  2 => 'foo-bar',
  3 => 'abc',
  4 => 'def',
  5 => 'abc-def',
  6 => 'ghi',
  7 => 'abc-def-ghi',
  8 => 'xyz',
  9 => 'ghi-jkl',
)
于 2013-08-24T01:11:28.837 回答