Foreach在php的\u数组中工作不正常
您需要显示阵列的特定部分。不幸的是,我不能在数组中使用。Foreach工作不正常。为什么我的代码只反映数组的最后一个元素?如何从数组中提取数组的特定部分 我有一个数组:Foreach在php的\u数组中工作不正常,php,arrays,foreach,Php,Arrays,Foreach,您需要显示阵列的特定部分。不幸的是,我不能在数组中使用。Foreach工作不正常。为什么我的代码只反映数组的最后一个元素?如何从数组中提取数组的特定部分 我有一个数组: Array ( [$ id] => 1 [items] => Array ( [0] => Array ( [n] => 1 [Produ
Array
(
[$ id] => 1
[items] => Array
(
[0] => Array
(
[n] => 1
[Product] => MH OC52
[Item] => MH OC52
[Item2] => MH OC52
[isPic] => MH OC52
[Brand] => MAHLE
[Name] => Oil filter
[Found By] => MH OC52
[For Labels1] =>
[Price] => 136.82
[Retail] => 231.9
[codeDisc] => ES2
[Markup] => 0
[noReturn] => 0
)
[1] => Array
(
[n] => 2
[Product] => CH C104.12
[Item] => CH C104.12
[Item2] => .......
)
[2] => Array
(
[n] => 2
[Product] => WX WL7074-12
[Item] => WX WL7074-12
........
这是我的密码:
if (is_array( $obj)) {
foreach($obj['items'] as $key=>$obRes){
if ($ter = in_array("C104.12", $obRes)) {
echo ' tak' ;
}
else {
echo "NOT Good";
}
}
var_dump ($key, $obRes['Price'],$obRes['Item'], $obRes['Bran'], $obRes['Name']);
我请求帮助
我需要获取数据:
[Item] => CH C104.12
[Brand] => CHAMPION
[Name] => Oil filter
[Price] => 35.69
好的,当您尝试在数组数组中查找值时,您可以使用php的
FilterIterator
类。让我们看看,这是如何做到的
我们假设您的内部数组始终具有与以下示例中相同的键:
$data = [
[
'product' => 'Product A',
'brand' => 'Brand A',
'price' => 12.34,
],
[
'product' => 'Product B',
'brand' => 'Brand B',
'price' => 56.78,
],
[
'product' => 'Product C',
'brand' => 'Brand C',
'price' => 90.12,
],
];
正如您所看到的,这个数组的结构与您自己的数组类似。例如,原因就不一样了。毕竟,你应该学会如何解决你的问题
让我们来看看,filterierator
如何帮助您。首先,我们需要指定一个过滤器,用于过滤产品名称上的数组
class ProductFilterIterator extends \FilterIterator
{
protected $filter;
public function __construct(\Iterator $iterator, string $filter)
{
$this->filter = $filter;
parent::__construct($iterator);
}
public function accept() : bool
{
$current = $this->getInnerIterator()->current();
return $current['product'] == $this->filter;
}
}
这是一个非常简单的FilterInterator
类,它接受给定的过滤器,并将其与数组集合中某个内部数组的产品密钥进行比较。当在数组中找到给定的产品“产品B”时,过滤器迭代器的accept
方法返回true。否则返回false。让我们在一个简短的示例中搜索名为“product B”的产品
$iterator = (new \ArrayObject($data))->getIterator();
$filter = new ProductFilterIterator($iterator, 'Product B');
foreach ($filter as $data) {
echo "<pre>";
var_dump($data);
echo "</pre>";
}
我想这将是当今过滤像您这样的多维数组的最佳实践解决方案。像您自己尝试过的那样封装的迭代可以工作,但大多数时候看起来非常奇怪,很难重构。在foreach循环中检查foreach中的值是在过去完成的。您应该应用更多最新的php技术。现在是2019年 我很想帮忙,但我不明白你在问什么。听起来好像您正试图根据其中一个键的值获取整个数组项[1]。这是真的吗<代码>=比较,
=
仅从我想要的数组中分配:[Item]=>WX WL7074-12[品牌]=>WIXFILTRON[名称]=>机油滤清器[价格]=>56.03Brother,只需使用==(双倍等于)进行比较。如果($ter==in_数组(“C104.12,$obRes)),为什么我的代码会出现问题?数组的最后一部分?替换您的数据并获取它:警告:非法字符串偏移量“items”在……嗯。。。我不知道你做了什么。但你做错了什么。请重试。$current=$this->getInnerIterator()->current();返回$current['Product']==$this->filter;}$迭代器=(new\ArrayObject($obj))->getIterator()$filter=新产品filterator($iterator,'chc104.12');foreach($obj形式的过滤器){echo”“;var_dump($obj);只需尝试$iterator=(new\ArrayObject($obj['items'))->getIterator();
。非常感谢您的帮助。
$iterator = (new \ArrayObject($data))->getIterator();
$filter = new ProductFilterIterator($iterator, 'Product B');
foreach ($filter as $data) {
echo "<pre>";
var_dump($data);
echo "</pre>";
}
array(3) {
["product"] => string(9) "Product B"
["brand"] => string(7) "Brand B"
["price"] => float(56.78)
}