образец двух массивов
$a=array("a","b","c","d");
$b=array("b","c","d","f");
и я использую цикл для получения этого результата
ab ac ad af bb bc bd bf cb cc cd cf db dc dd df
один массив $ a element выровнять элемент массива $ b
и я хочу посчитать элемент этого решения
проблема в том, что я хочу bd и db как одно и то же, мы узнаем, что они появляются два раза
Как я могу сделать это в PHP?
после этого я запишу все решения для подсчета в MySQL
быстрый ответ — отсортируйте два элемента, прежде чем объединить их, а затем проверьте, существуют ли они уже в наборе ответов.
$a=array("a","b","c","d");
$b=array("b","c","d","f");
$res = array();
foreach($a as $v1) {
foreach($b as $v2) {
$t = array($v1, $v2);
asort($t);
$val = implode('', $t);
if(!in_array($val, $res))
$res[] = $val;
}
}
print_r($res);
Лучшим алгоритмом было бы создание только допустимых строк в конце цикла for.
Позвольте мне объяснить раньше.
$ А = массив ( «а», «б», «в», «г»);
$ Ь = массив ( «б», «в», «г», «е»);
$ Х = array_diff ($ а, $ б); // X будет иметь только элементы «a».
$ y = array_uintersect () // Проверка синтаксиса. даст вам спички «b» «c» «d»
В используемом forloop используйте $ x вместо $ a.
Это приведет к следующему результату «ab ac ad af»
И у $ y есть спички. Таким образом, вы можете использовать его для создания «bb», «cc», «dd»
Если вы хотите рассчитывать в одиночку, то ответ, который вы хотите, это считать (совпадения) + результат вашего цикла for.
Мое решение:
<?php
$a=array("a","b","c","d");
$b=array("b","c","d","f");
$c=array();
$d=array();
$ii=0;
foreach($a as $dat){
if(!isset($c[$dat])){
$c[$dat]=$ii;
$ii++;
}
}
foreach($b as $dat){
if(!isset($c[$dat])){
$c[$dat]=$ii;
$ii++;
}
}
$count=0;
for ($i = 0; $i < count($a); $i++) {
for ($j = 0; $j < (count($b)); $j++) {
if(!isset($d[$c[$a[$i]]][$c[$b[$j]]])){
echo $a[$i].$b[$j]."<br/>";
$d[$c[$a[$i]]][$c[$b[$j]]]=1;
$d[$c[$b[$j]]][$c[$a[$i]]]=1;
$count++;
}
}
}
echo "The count is: ".$count;
?>
Попробуй это:
$a = array("a", "b", "c", "d");
$b = array("b", "c", "d", "f");
sort($a);
sort($b);
$result = [];
for ($i = 0; $i < count($a); $i++) {
for ($j = 0; $j < (count($b)); $j++) {
if ($b[$j] < $a[$i]) {
continue;
}
$result[] = $a[$i] . $b[$j];
}
}
$result = array_unique($result, SORT_STRING);
var_dump($result);
$a=array("a","b","c","d");
$b=array("b","c","d","f");
$y=array_intersect($a,$b);
print_r ($y);
$req=count($a)*count($b) - count($y);//13
echo $req;