我有以下数组。
$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
你推荐什么?
答案 0 :(得分:1)
对你可以尝试的一种方式提出建议......
对于$ arr中的每个字符串,将其反转为另一个名为$ 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
}
答案 1 :(得分: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',
)