循环数组并仅保留与具有限定值的特定键相关的元素

Amj*_*lil 0 php arrays loops filter

我有这个数组:

(
  [id] => block_5df755210d30a
  [name] => acf/floorplans
  [data] => Array
  (
    [floorplans_0_valid_for_export] => 0
    [floorplans_0_title] => title 1
    [floorplans_0_house_area] => 40m²
    [floorplans_0_bedrooms] => 1
    [floorplans_1_valid_for_export] => 1
    [floorplans_1_title] => title xx
    [floorplans_1_house_area] => 90m²
    [floorplans_1_bedrooms] => 2
    [floorplans_2_valid_for_export] => 1
    [floorplans_2_title] => title 2
    [floorplans_2_house_area] => 50m²
    [floorplans_2_bedrooms] => 1
    [floorplans] => 3

  )
)
Run Code Online (Sandbox Code Playgroud)

正如我们在数据中看到的,我们有字段 ( floorplans_X_valid_for_export)。我想要做的是仅在此字段等于1.

因此,从给定的示例中,我只想保留这些字段:

[floorplans_1_valid_for_export] => 1
[floorplans_1_title] => title xx
[floorplans_1_house_area] => 90m²
[floorplans_1_bedrooms] => 2
[floorplans_2_valid_for_export] => 1
[floorplans_2_title] => title 2
[floorplans_2_house_area] => 50m²
[floorplans_2_bedrooms] => 1
Run Code Online (Sandbox Code Playgroud)

Ale*_*lex 5

这是一个奇怪的模式,但可以通过遍历数组并搜索“valid_for_export”等于 1 的键,然后使用另一个字段“存根”数组通过 X 的唯一标识符获取关联项来完成 floorplans_X_valid_for_export

$array = [
    'floorplans_0_valid_for_export' => 0,
    'floorplans_0_title' => 'title 1',
    'floorplans_0_house_area' => '40m²',
    'floorplans_0_bedrooms' => 1,
    'floorplans_1_valid_for_export' => 1,
    'floorplans_1_title' => 'title xx',
    'floorplans_1_house_area' => '90m²',
    'floorplans_1_bedrooms' => '2',
    'floorplans_2_valid_for_export' => 1,
    'floorplans_2_title' => 'title 2',
    'floorplans_2_house_area' => '50m²',
    'floorplans_2_bedrooms' => 1,
    'floorplans' => 3
];


$stubs = [
     'floorplans_%s_valid_for_export',
     'floorplans_%s_title',
     'floorplans_%s_house_area',
     'floorplans_%s_bedrooms'
];

$newArr = [];

foreach ($array as $key => $value) {
    if (strpos($key, 'valid_for_export') && $array[$key] == 1) {
        $intVal = filter_var($key, FILTER_SANITIZE_NUMBER_INT);
        foreach ($stubs as $stub) {
            $search = sprintf($stub, $intVal);
            if (isset($array[$search])) {
                $newArr[$search] = $array[$search];
            } else {
                // key can't be found, generate one with null
                $newArr[$search] = null;
            }
        }
    }
}

echo '<pre>';
print_r($newArr);
Run Code Online (Sandbox Code Playgroud)

工作:http : //sandbox.onlinephpfunctions.com/code/23a225e3cefa2dc9cc97f53f1cbae0ea291672c0