我有一个数组:
Array(
[0] => Array(
['title'] => 'Apple',
['type'] => '1'
),
[1] => Array(
['title'] => 'Oranage',
['type'] => '2'
),
[2] => Array(
['title'] => 'Tomato',
['type'] => '1'
),
//when compares with [0], 'type' is equal and both contains 'Apple', remove.
[3] => Array(
['title'] => 'Red Apple',
['type'] => '1'
),
[4] => Array(
['title'] => 'Big Tomato',
['type'] => '3'
),
//when compares with [1], 'type' is equal and both contains 'Oranage', remove.
[5] => Array(
['title'] => 'Sweet Oranage',
['type'] => '2'
)
);
如果'type'元素相等,而'title'elment包含相同的字符串([0]和[3]包含'Apple'),则只使用一个元素。 结果将是:
Array(
[0] => Array(
['title'] => 'Apple',
['type'] => '1'
),
[1] => Array(
['title'] => 'Oranage',
['type'] => '2'
),
[2] => Array(
['title'] => 'Tomato',
['type'] => '1'
),
[4] => Array(
['title'] => 'Big Tomato',
['type'] => '3'
)
);
如何过滤这个,我很困惑。 感谢。
答案 0 :(得分:0)
如果您认为您的条件是替代条件,那么如果通过以下条件之一,则只能使用符合特定条件的所有值中的一个:
如果是这样,您可以使用一些索引数组来存储已经找到的'type'和'title'变量,并且:
在回报中,您应该收到您所描述的内容。只需用PHP编写。
答案 1 :(得分:0)
这样的事情应该做:
$array = array(/* your array */);
$filteredArray = array();
foreach ($array as $key => $elem) {
foreach ($filteredArray as $comp) {
if ($elem['type'] == $comp['type'] &&
(strpos($elem['title'], $comp['title']) !== false || strpos($comp['title'], $elem['title']) !== false)
) {
continue 2; // skip to the next $elem
}
}
$filteredArray[$key] = $elem;
}
答案 2 :(得分:0)
如果数组保存在变量$ar
中,则:
$filtered = Array();
for(int $i = 0; $i < count($ar); $i++) {
for(int $j = $i; $j < count($ar); $j++) {
if($ar[$i][$type] == $ar[$i][$type]) {
if(strlen($ar[$i][$title]) < strlen($ar[$j][$title])) {
$larger = $j;
$smaller = $i;
}
else {
$larger = $i;
$smaller = $j;
}
if(preg_match(strtolower($smaller), strtolower($larger)) {
$filtered = array_merge($filtered, array_slice($ar, 0, $larger - 1), array_slice($ar, $larger, count($ar) - $larger));
}
}
}
}
查找具有相同类型的两个元素。然后,获取具有最短标题的元素的标题,并在另一个元素中搜索preg_match
。如果找到,请将先前过滤的数组与重复之前和之后的所有元素合并。