首页 > 解决方案 > 在多维php数组中查找字符串(键)

问题描述

我有这个数组,我试图在 sku 匹配到“Testproduct_2327”时获取“id”。

我不确定如何实现这一点。

$main_array = array (
  'status' => true,
  'response' => 
    array (
      'code' => 200,
      'result' => 
      array (
        'products' => 
        array (
          0 => 
          array (
            'id' => '0242e39e-bf20-11eb-fc6f-4cc6b4b8af34',
            'sku' => 'Testproduct_0'
            ),
          1 => 
          array (
            'id' => '0242e39e-bf20-11eb-fc6f-4cc6b6682978',
            'handle' => 'vend_2327handle',
            'sku' => 'Testproduct_1'
          ),
          2 => 
          array (
            'id' => '0242e39e-bf20-11eb-fc6f-4cc6d31d1d02',
            'handle' => 'vend_2327handle',
            'sku' => 'Testproduct_2327',
        ),
      ),
    ),
  )
);

我已经尝试过了,但它不起作用

     array_walk_recursive($main_array, function ($item, $key) {
      if($key == "sku" && $item == "Testproduct_2327"){
      echo $item;
      }
});

对此有什么想法吗?php 编译器 - https://rextester.com/AKIXIC51695

谢谢

标签: phparrays

解决方案


你快到了。您只需使用传递引用将 ID 变量传递给回调,以便在其范围内操作相同的 ID,如下所示:

<?php

$id = '';
array_walk_recursive($main_array, function ($item, $key) use (&$id){
    //echo "$key holds $item\n";
      if($key === 'id'){
          $id = $item;
      }else if($key == "sku" && $item == "Testproduct_2327"){
          echo $id;
      }
});

对于动态变量,您可以执行以下操作:

<?php

$id = '';
$compare_sku = 'Testproduct_2327';
array_walk_recursive($main_array, function ($item, $key) use (&$id,&$compare_sku){
    //echo "$key holds $item\n";
      if($key === 'id'){
          $id = $item;
      }else if($key == "sku" && $item == $compare_sku){
          echo $id,"<br/>";
      }
});

推荐阅读