Php 检查循环中是否存在数组键和值
我有一张这样的票Php 检查循环中是否存在数组键和值,php,arrays,multidimensional-array,foreach,Php,Arrays,Multidimensional Array,Foreach,我有一张这样的票 $ret=array(); foreach($temp as $k=>$v) { $thv=mysql_fetch_array(mysql_query(" SOMEQUERY ")); $ret[]=$thv; } 这里我把$thv的每个输出推到$ret就像$ret[]=$thv $ret的输出为 [1] => Array ( [0] => 701 [id] => 701 [1]
$ret=array();
foreach($temp as $k=>$v)
{
$thv=mysql_fetch_array(mysql_query(" SOMEQUERY "));
$ret[]=$thv;
}
这里我把$thv
的每个输出推到$ret
就像$ret[]=$thv代码>
$ret
的输出为
[1] => Array
(
[0] => 701
[id] => 701
[1] => 1180
[media_image_id] => 1180
[2] => George Cumming - Session 1
[name] => George Cumming - Session 1
[3] =>
[preparation] =>
[4] =>
[description] =>
[5] =>
[coaching_points] =>
[6] =>
[progressions] =>
)
[2] => Array
(
[0] => 701
[id] => 701
[1] => 1180
[media_image_id] => 1180
[2] => George Cumming - Session 1
[name] => George Cumming - Session 1
[3] =>
[preparation] =>
[4] =>
[description] =>
[5] =>
[coaching_points] =>
[6] =>
[progressions] =>
)
这里id=>701
重复,所以我要做的是,从数组中删除重复的值,但要在该foreach循环中。
像
这样就不需要再创建一个foreach。有人知道如何在php中实现这一点吗?我有个主意-使用id
作为$ret
的键。例如:
$ret = array();
$ids = array();
foreach($temp as $k => $v) {
// Run query
$thv = mysql_fetch_array(mysql_query(" SOMEQUERY "));
// Check if id present
if (!in_array($thv['id'], $ids)) {
// Not present, add to arrays
$ids[] = $thv['id'];
$ret[] = $thv;
}
}
$ret=array();
foreach($temp as $k=>$v)
{
$thv=mysql_fetch_array(mysql_query(" SOMEQUERY "));
if (!isset($ret[$thv['id']])){
$ret[$thv['id']]=$thv;
}
}
如果仍然希望0..n成为$ret
的键,可以这样做:
$ret = array_values($ret);
我有个主意-使用id
作为$ret
的键。例如:
$ret=array();
foreach($temp as $k=>$v)
{
$thv=mysql_fetch_array(mysql_query(" SOMEQUERY "));
if (!isset($ret[$thv['id']])){
$ret[$thv['id']]=$thv;
}
}
如果仍然希望0..n成为$ret
的键,可以这样做:
$ret = array_values($ret);
我有个主意-使用id
作为$ret
的键。例如:
$ret=array();
foreach($temp as $k=>$v)
{
$thv=mysql_fetch_array(mysql_query(" SOMEQUERY "));
if (!isset($ret[$thv['id']])){
$ret[$thv['id']]=$thv;
}
}
如果仍然希望0..n成为$ret
的键,可以这样做:
$ret = array_values($ret);
我有个主意-使用id
作为$ret
的键。例如:
$ret=array();
foreach($temp as $k=>$v)
{
$thv=mysql_fetch_array(mysql_query(" SOMEQUERY "));
if (!isset($ret[$thv['id']])){
$ret[$thv['id']]=$thv;
}
}
如果仍然希望0..n成为$ret
的键,可以这样做:
$ret = array_values($ret);
试试这个代码
$ret=array();
foreach($temp as $k=>$v)
{
$temp =array_column($ret,'id');
$thv=mysql_fetch_array(mysql_query(" SOMEQUERY "));
if(!in_array($thv['id'],$temp)){
$ret[]=$thv;
}
}
试试这个代码
$ret=array();
foreach($temp as $k=>$v)
{
$temp =array_column($ret,'id');
$thv=mysql_fetch_array(mysql_query(" SOMEQUERY "));
if(!in_array($thv['id'],$temp)){
$ret[]=$thv;
}
}
试试这个代码
$ret=array();
foreach($temp as $k=>$v)
{
$temp =array_column($ret,'id');
$thv=mysql_fetch_array(mysql_query(" SOMEQUERY "));
if(!in_array($thv['id'],$temp)){
$ret[]=$thv;
}
}
试试这个代码
$ret=array();
foreach($temp as $k=>$v)
{
$temp =array_column($ret,'id');
$thv=mysql_fetch_array(mysql_query(" SOMEQUERY "));
if(!in_array($thv['id'],$temp)){
$ret[]=$thv;
}
}
mysql扩展已弃用。新代码应该使用or,两者都有重要的优点,比如支持准备好的语句。此外,结果可以直接迭代(尽管mysqli需要php5.4),结果可以一次提取到一个数组中(换句话说,每个扩展已经有一个函数可以完成循环所做的事情)。应该通过正确编写SQL语句来防止重复,而不是通过在PHP中过滤它们来防止重复。重复的“”可能还有许多其他语句。不推荐使用mysql扩展。新代码应该使用or,两者都有重要的优点,比如支持准备好的语句。此外,结果可以直接迭代(尽管mysqli需要php5.4),结果可以一次提取到一个数组中(换句话说,每个扩展已经有一个函数可以完成循环所做的事情)。应该通过正确编写SQL语句来防止重复,而不是通过在PHP中过滤它们来防止重复。重复的“”可能还有许多其他语句。不推荐使用mysql扩展。新代码应该使用or,两者都有重要的优点,比如支持准备好的语句。此外,结果可以直接迭代(尽管mysqli需要php5.4),结果可以一次提取到一个数组中(换句话说,每个扩展已经有一个函数可以完成循环所做的事情)。应该通过正确编写SQL语句来防止重复,而不是通过在PHP中过滤它们来防止重复。重复的“”可能还有许多其他语句。不推荐使用mysql扩展。新代码应该使用or,两者都有重要的优点,比如支持准备好的语句。此外,结果可以直接迭代(尽管mysqli需要php5.4),结果可以一次提取到一个数组中(换句话说,每个扩展已经有一个函数可以完成循环所做的事情)。应该通过正确编写SQL语句来防止重复,而不是通过在PHP中过滤它们来防止重复。重复的“”可能还有许多其他语句。in_array()
是一个糟糕的选择,因为它必须搜索数组。总的来说,它使这个O(n^2)
。如果需要一组标量,请将标量用作键,而不是值。@outis:当然,我知道,但对于这样的代码,这应该不会有任何问题。我很确定这个查询不是用来把人送入太空的。我知道时间的复杂性,但它简单易读。问题是这是一个糟糕的例子。人们将从这个代码中学习。您可以编写同样简单合理的代码,但也可以通过更改两行来执行。in_array()
是一个糟糕的选择,因为它必须搜索数组。总的来说,它使这个O(n^2)
。如果需要一组标量,请将标量用作键,而不是值。@outis:当然,我知道,但对于这样的代码,这应该不会有任何问题。我很确定这个查询不是用来把人送入太空的。我知道时间的复杂性,但它简单易读。问题是这是一个糟糕的例子。人们将从这个代码中学习。您可以编写同样简单合理的代码,但也可以通过更改两行来执行。in_array()
是一个糟糕的选择,因为它必须搜索数组。总的来说,它使这个O(n^2)
。如果需要一组标量,请将标量用作键,而不是值。@outis:当然,我知道,但对于这样的代码,这应该不会有任何问题。我很确定这个查询不是用来把人送入太空的。我知道时间的复杂性,但它简单易读。问题是这是一个糟糕的例子。人们将从这个代码中学习。您可以编写同样简单合理的代码,但也可以通过更改两行来执行。in_array()
是一个糟糕的选择,因为它必须搜索数组。总的来说,它使这个O(n^2)
。如果需要一组标量,请将标量用作键,而不是值。@outis:当然,我知道,但对于这样的代码,这应该不会有任何问题。我很确定这个查询不是用来把人送入太空的。我知道时间的复杂性,但它简单易读。问题是这是一个糟糕的例子。人们将从这个代码中学习。您可以编写同样简单合理的代码,但也可以通过更改两行来提高性能。性能甚至比OptimuScime的答案还要差array\u column()
也是O(n)
,而且每次迭代都要重新创建$temp
数组,即使每次都有一个额外的项($thv['id']
),性能甚至比OptimucPrime的答案还要差<代码>数组_列()
为