Php 看看其他Comrad告诉您的关于正确转义和取消转义函数的内容:)我已经为此添加了一个方法。我得到了:$class_analogs=新的analogs()$mixed_analogs=$class_analogs->MixedAnalogs('abcd');
Php 看看其他Comrad告诉您的关于正确转义和取消转义函数的内容:)我已经为此添加了一个方法。我得到了:$class_analogs=新的analogs()$mixed_analogs=$class_analogs->MixedAnalogs('abcd');,php,recursion,Php,Recursion,看看其他Comrad告诉您的关于正确转义和取消转义函数的内容:)我已经为此添加了一个方法。我得到了:$class_analogs=新的analogs()$mixed_analogs=$class_analogs->MixedAnalogs('abcd');回声“;打印(混合模拟);回声“;数组([0]=>数组([sku]=>a1)[1]=>)和?你想让我们代替你工作吗?:)我们给你一个想法——下一步你应该自己做。这真的是可伸缩的吗?将所有mysql数据加载到一个数组中,会使mysql失效。你失去
看看其他Comrad告诉您的关于正确转义和取消转义函数的内容:)我已经为此添加了一个方法。我得到了:$class_analogs=新的analogs()$mixed_analogs=$class_analogs->MixedAnalogs('abcd');回声“;打印(混合模拟);回声“;数组([0]=>数组([sku]=>a1)[1]=>)和?你想让我们代替你工作吗?:)我们给你一个想法——下一步你应该自己做。这真的是可伸缩的吗?将所有mysql数据加载到一个数组中,会使mysql失效。你失去了数据库的速度和效率。我知道,必须是一个水平,而且将是。现在这只是一个测试。@Husman,正如我说的,不,这不是很好的可伸缩性,如果数据越来越大,你必须找到缓存策略。无论如何,如果缩放成为一个问题,我认为在DB中显式存储类比链接将是迄今为止最好的选择。
+----+-------+-------+
| id | sku_1 | sku_2 |
+----+-------+-------+
| 1 | a1 | abcd |
| 2 | a2 | a3 |
| 3 | a3 | a1 |
+----+-------+-------+
3 rows in set (0.00 sec)
// Small Class to get analogs of products
class Analogs {
public function get_analogs($sku)
{
if (!$sku) return false;
$link = mysql_connect('localhost','','');
mysql_select_db('test');
$sku = mysql_real_escape_string($sku,$link);
$query = mysql_query("SELECT * FROM analogs WHERE sku_1='".$sku."' OR sku_2='".$sku."'");
while($analogs[]=mysql_fetch_assoc($query))
continue;
return $analogs;
}
public function MixedAnalogs($sku)
{
if (!$sku) return false;
$link = mysql_connect('localhost','','');
mysql_select_db('test');
$sku = mysql_real_escape_string($sku,$link);
$query = mysql_query("select sku_1 sku from analogs where sku_2 = '$sku' UNION
select sku_2 sku from analogs where sku_1 = '$sku'");
while($analogs[]=mysql_fetch_assoc($query))
continue;
return $analogs;
}
}
$mixed_analogs = AnalogsMix('abcd',$ids=array());
echo "<pre>";
print_r($mixed_analogs);
echo "</pre>";
// Recursive function to get analogs of analog
function AnalogsMix($sku,$ids=array())
{
$class_analogs = new Analogs();
$analogs = $class_analogs->get_analogs($sku);
foreach ($analogs as $analog)
{
$cross = null;
if ($analog['sku_1']==$sku)
{
$cross->sku = $analog['sku_2'];
}
else
{
$cross->sku = $analog['sku_1'];
}
$cross->id = $analog['id'];
if (!in_array($analog['id'],$ids))
{
$ids[] = $analog['id'];
$mixed[] = AnalogsMix($cross->sku,$ids);
}
}
if (isset($mixed))
{
return $mixed;
}
else
{
return false;
}
}
select sku_1 sku from analogs where sku_2 = $yourid
union
select sku_2 sku from analogs where sku_1 = $yourid
function analogsOf(array $pairs, $key) {
$res = array($key); // The result, with only the given key
$i = 0; // Index of the current item
$changed = false; // Have we added an item to $res during that iteration ?
while ($i < count($pairs)) {
$current = $pairs[$i];
foreach ($res as $item) {
if (($current[0] === $item) && (!in_array($current[1], $res)) {
$res[] = $current[1];
$i = 0; // Reiterate as $res changed
}
else if (($current[1] === $item) && (!in_array($current[0], $res)) {
$res[] = $current[0];
$i = 0; // Reiterate as $res changed
}
else {
$i++; // Nothing found here, go to next item
}
}
}
return $res;
}
<?php
mysql_connect('localhost','','');
mysql_select_db('test');
function getSku($sku, $id, $rel = '') {
$query = mysql_query("SELECT * FROM analogs WHERE sku_1 = '$sku' AND id != '$id'" );
if (mysql_num_rows($query)) {
$row = mysql_fetch_assoc($query);
$sku = $row['sku_2']; //PARENT SKU
$id = $row['id']; //LAST ID
$rel .= $row['sku_1']. '-->' . $row['sku_2']. "<br>";
} else {
$query = mysql_query("SELECT * FROM analogs WHERE sku_2 = '$sku' AND id != '$id'" );
if (mysql_num_rows($query)) {
$row = mysql_fetch_assoc($query);
$sku = $row['sku_1']; //PARENT SKU
$id = $row['id']; //LAST ID
$rel .=$row['sku_2']. '-->' . $row['sku_1']. '<br>';
} else {
return (string)$rel; //NOTHING FOUND
}
}
return getSku($sku,$id,$rel);
}
echo $new = getSku('abcd','-1');