Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Foreach在php的\u数组中工作不正常_Php_Arrays_Foreach - Fatal编程技术网

Foreach在php的\u数组中工作不正常

Foreach在php的\u数组中工作不正常,php,arrays,foreach,Php,Arrays,Foreach,您需要显示阵列的特定部分。不幸的是,我不能在数组中使用。Foreach工作不正常。为什么我的代码只反映数组的最后一个元素?如何从数组中提取数组的特定部分 我有一个数组: Array (     [$ id] => 1     [items] => Array         (             [0] => Array                 (                     [n] => 1                     [Produ

您需要显示阵列的特定部分。不幸的是,我不能在数组中使用。Foreach工作不正常。为什么我的代码只反映数组的最后一个元素?如何从数组中提取数组的特定部分

我有一个数组:

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)
}