【问题标题】:Extract equal values for multidimensional array in php在php中为多维数组提取相等的值
【发布时间】:2021-01-13 10:44:30
【问题描述】:

我有这个问题。我有一个多维 json 数组(不要问 - 遗留代码)。我将其转换为 PHP 数组。我需要提取所有具有 EQUAL VALUE 的键(在我的情况下为“666”)。我需要将每个键分配给一个单独的变量。在我的代码中,我成功获取了密钥,但我只能将它们分配给另一个数组或一次全部分配给单个变量。请帮忙!!!

爱V

代码如下:

<?php
//user input
$in = "666";

$outputZ = '[
{"record_id_001":"1"},
{"record_id_002":"13"},
{"record_id_003":"666"},
{"record_id_004":"72661781"},
{"record_id_005":"8762"},
{"record_id_006":"666"},
{"record_id_007":"8762"},
{"record_id_008":"666"},
{"record_id_009":"8762"},
{"record_id_010":"8762"},
{"record_id_011":"666"}
]';

//convert json to php array
//someArray = json_decode($someJSON, true);
$decoZ = json_decode($outputZ, true);

// TESTING (move to comment latter)
//print_r ($decoZ);

//loop through each array an check for user input
//way 1: assign to new array
foreach($decoZ as $array => $number)
foreach($number as $key => $value)
    if (in_array("$in", $number)) {
        $var = $key;
        $getarray = "'" . $var . "'";
        $recnumber = array($getarray);
        print_r ($recnumber);
        }

//way 2: assign to variable 
foreach($decoZ as $array => $number)
foreach($number as $key => $value)
    if (in_array("$in", $number)) {
        $var = $key;
        echo "$var" . " ";
        }
?>

【问题讨论】:

    标签: php arrays multidimensional-array fetch key


    【解决方案1】:

    您在每次迭代 $recnumber = array($getarray);

    时都会覆盖您的数组

    我宁愿遵循这个逻辑:

    <?php
    //user input
    $in = "666";
    
    $outputZ = '[
    {"record_id_001":"1"},
    {"record_id_002":"13"},
    {"record_id_003":"666"},
    {"record_id_004":"72661781"},
    {"record_id_005":"8762"},
    {"record_id_006":"666"},
    {"record_id_007":"8762"},
    {"record_id_008":"666"},
    {"record_id_009":"8762"},
    {"record_id_010":"8762"},
    {"record_id_011":"666"}
    ]';
    
    $decoZ = json_decode($outputZ, true);
    
    
    // create empty array
    $recnumber = [];
    foreach($decoZ as $record)
    {
        foreach($record as $key => $value)
        {
            // simply compare input with current value
            if ($value === $in)
            {
                // add the key to the previously created array
                $recnumber[] = $key;
            }
        }
    }
    
    var_dump($recnumber);
    

    这个输出:

    数组(4) {
    [0]=>
    字符串(13)“record_id_003”
    [1]=>
    字符串(13)“record_id_006”
    [2]=>
    字符串(13)“record_id_008”
    [3]=>
    字符串(13)“record_id_011”
    }

    【讨论】:

    • 谢谢@Cid,这几乎是我所需要的,但我需要进一步处理这些键,所以我需要将这个新数组中的所有值分配给一个变量。我怎样才能做到这一点? (将没有固定数量的结果 - 从 2 到 5)。谢谢
    • 动态创建的变量,比如$record_id_003$record_id_006等等?
    • 是的,我需要继续它们,因为它们是数据库中的一个 id,我只需要提取那些记录,所以我需要它们作为 $something...
    【解决方案2】:

    您可以简单地重新映射记录。

    最后你可以像这样抓住它们

    $codes666 = $ids['666'];
    
    $outputZ = '[
    {"record_id_001":"1"},
    {"record_id_002":"13"},
    {"record_id_003":"666"},
    {"record_id_004":"72661781"},
    {"record_id_005":"8762"},
    {"record_id_006":"666"},
    {"record_id_007":"8762"},
    {"record_id_008":"666"},
    {"record_id_009":"8762"},
    {"record_id_010":"8762"},
    {"record_id_011":"666"}
    ]';
    
    $records = json_decode($outputZ);
    $ids = [];
    foreach($records as $record) {
        foreach($record as $key => $value) {
            $ids[(string)$value][] = $key;
        }
    }
    
    print_r($ids);
    

    给予

    Array
    (
        [1] => Array
            (
                [0] => record_id_001
            )
    
        [13] => Array
            (
                [0] => record_id_002
            )
    
        [666] => Array
            (
                [0] => record_id_003
                [1] => record_id_006
                [2] => record_id_008
                [3] => record_id_011
            )
    
        [72661781] => Array
            (
                [0] => record_id_004
            )
    
        [8762] => Array
            (
                [0] => record_id_005
                [1] => record_id_007
                [2] => record_id_009
                [3] => record_id_010
            )
    
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-21
      • 2012-08-10
      • 2012-09-29
      • 2020-06-05
      相关资源
      最近更新 更多