可能重复:
搜索包含字符串的PHP数组元素
我已经创建了一个mysql查询,它可以浏览多个产品,所有产品都包含以下信息:
产品ID产品名称产品价格和产品类别
在页面的下方,我通过foreach和一些'ifs'循环使用这些,所以它只显示那些名称在一个div中包含'x'的产品,并在另一个div中显示名称包含'y'的那些产品.
在进行循环之前,我很难计算每个div中会有多少产品.
基本上,我要问的是:
如何计算满足特定条件的数组中的所有元素?
添加了显示循环的代码:
<div id="a">
<?php
$i = 1;
foreach ($products AS $product) {
if (strpos($product->name,'X') !== false) {
=$product->name
}
$i++;
} ?>
</div>
<div id="b">
$i = 1;
foreach ($products AS $product) {
if (strpos($product->name,'Y') !== false) {
=$product->name
}
$i++;
} ?>
</div>
Run Code Online (Sandbox Code Playgroud)
在我实际进行循环之前,我想知道其中有多少会在这里.
嗯,没有看到代码,所以一般来说,如果你要分开它们,你可能还要预先做到这一点?
<?php
// getting all the results.
$products = $db->query('SELECT name FROM foo')->fetchAll();
$div1 = array_filter($products, function($product) {
// condition which makes a result belong to div1.
return substr('X', $product->name) !== false;
});
$div2 = array_filter($products, function($product) {
// condition which makes a result belong to div2.
return substr('Y', $product->name) !== false;
});
printf("%d elements in div1", count($div1));
printf("%d elements in div2", count($div2));
// then print the divs. No need for ifs here, because results are already filtered.
echo '<div id="a">' . PHP_EOL;
foreach( $div1 as $product ) {
echo $product->name;
}
echo '</div>';
echo '<div id="b">' . PHP_EOL;
foreach( $div2 as $product ) {
echo $product->name;
}
echo '</div>';
Run Code Online (Sandbox Code Playgroud)
话虽这么说:你应该注意一下"这通常在SQL中更快"的评论,因为如果你想过滤这些值,这是更合理的方法.
编辑:更改变量的名称以适应示例代码中的变量名称.