为 php 中的多维数组提取相等的值

Extract equal values for multidimensional array in php

我有这个问题。我有一个多维 json 数组(不要问 - 遗留代码)。我将它转换为 PHP 数组。我需要提取所有具有 EQUAL VALUE 的 KEYS(在我的例子中是“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" . " ";
        }
?>

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

最后可以点赞

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

)

您在每次迭代时都覆盖了您的数组 $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);

这输出:

array(4) {
[0]=>
string(13) "record_id_003"
[1]=>
string(13) "record_id_006"
[2]=>
string(13) "record_id_008"
[3]=>
string(13) "record_id_011"
}