如果查找数据中存在匹配键,则仅在新数组中添加 "key/value"

Only add "key/value" in new array if matching key exists in lookup data

我正在通过创建一个新数组来重构一个数组。 新数组的目的是扁平化代码,也只是 添加具有 $array['lookup'].

中键的键值对

问题:

我如何确保 for 循环只创建键值对, 与 $array['lookup'] ?

中的键值一起列出
<?php

// Data

$array = [

  'identification_posts' => [
    [
      "#COMPANY",
      "Ford"
    ],
    [
      "#SOFTWARE",
      "1.2"
    ],
    [
      "#id",
      "237"
    ],
  ],
  'lookup' => [
    '#COMPANY',
    '#SOFTWARE',
  ]

];

// Logics

print_r($array);

$newArray = [];

for ($i=0; $i < count($array['identification_posts']) ; $i++) {

  $newArray['identification_posts'][$array['identification_posts'][$i][0]] =
    $array['identification_posts'][$i][1];

}

print_r($newArray);

结果

Array
(
    [identification_posts] => Array
        (
            [#COMPANY] => Ford
            [#SOFTWARE] => 1.2
            [#id] => 237
        )

)

想要的结果 (不包括键值对 [id],因为它在 $array['lookup']

中丢失
Array
(
    [identification_posts] => Array
        (
            [#COMPANY] => Ford
            [#SOFTWARE] => 1.2
        )

)
<?php

// Data

$array = [

    'identification_posts' => [
        [
            "#COMPANY",
            "Ford"
        ],
        [
            "#SOFTWARE",
            "1.2"
        ],
        [
            "#id",
            "237"
        ],
    ],
    'lookup' => [
        '#COMPANY',
        '#SOFTWARE',
    ]

];

// Logics
echo '<pre>';
print_r($array);

$lookup = array_flip($array['lookup']);

for ($i = 0; $i < count($array['identification_posts']); $i++) {

    if (isset($lookup[$array['identification_posts'][$i][0]]))
        $newArray['identification_posts'][$array['identification_posts'][$i][0]] =
            $array['identification_posts'][$i][1];

}

print_r($newArray);

您可以检查索引是否为in_array

$newArray = [];

$count = count($array['identification_posts']);

for ($i = 0; $i < $count; $i++) {
    $key = $array['identification_posts'][$i][0];
    $value = $array['identification_posts'][$i][1];

    if ( in_array($key, $array['lookup']) ){
        $newArray['identification_posts'][$key] = $value;
    }
}

print_r($newArray);

正如所指出的,检查该值是否存在于查找数组中。我还更改了循环以使用 foreach() 因为它缩短了很多数组查找以使代码更具可读性(恕我直言)...

$newArray = [];
foreach ( $array['identification_posts'] as $entry ){
    if ( in_array($entry[0],  $array['lookup']) !== false ) {
        $newArray['identification_posts'][$entry[0]] = $entry[1];
    }
}
print_r($newArray);

也许您应该使用 in_array 来检查 value[0]lookup

    $lookup = $array['lookup'];
    $newArray = ['identification_posts' => []];
    foreach ($array['identification_posts'] as $value) {
        if (in_array($value[0], $lookup)) {
            $newArray['identification_posts'][$value[0]] = $value[1];
        }
    }

    // var_dump($newArray);