【问题标题】:extract selected array values based on list php根据列表php提取选定的数组值
【发布时间】:2017-12-16 10:36:22
【问题描述】:

我有一个字符串形式的数组键列表

"hasAddStrict,freqItems,freqAmount,freqUnit,freqFirstDayOfWeek"

现在,只想提取那些值,即 $myarray['hasAddstrict'] 应该变成 $hasAddStrict 等。

有没有捷径可以做到?我相当肮脏的解决方案:

$ff = explode(',' ,"hasAddStrict,freqItems,freqAmount,freqUnit,freqFirstDayOfWeek");
    foreach ( $ff   as $key){   $ff[$key] =    $SERVICE[$key]  ;    }
    extract($ff);

【问题讨论】:

  • tbh 我认为没有更好的方法。 但是是什么阻碍了您以数组的形式使用键/值?最好将它们放在一起,而不是用大量(可能是不可预测的?)变量向命名空间发送垃圾邮件。

标签: php arrays extract partial


【解决方案1】:

我同意 Jeff 的观点,即没有更好的方法,将变量保存为数组可能是一个更好的主意,但为了方便起见,您可以将其包装在一个函数中(在 php 5.6 中测试):

<?php

function array_extract(array $assoc_array, $keys_list)
{
    return array_intersect_key($assoc_array, array_flip(explode(',', $keys_list)));
}

extract(array_extract($SERVICE, "hasAddStrict,freqItems,freqAmount,freqUnit,freqFirstDayOfWeek"));

当测试如下:

$SERVICE = [
    'hasAddStrict' => 123,
    'freqItems' => 456,
    'freqAmount' => 789,
    'freqUnit' => 'abc',
    'freqFirstDayOfWeek' => 'def',
];

extract(array_extract($SERVICE, "hasAddStrict,freqItems,freqAmount,freqUnit,freqFirstDayOfWeek"));

var_dump($hasAddStrict, $freqItems, $freqAmount, $freqUnit, $freqFirstDayOfWeek);

你得到输出:

int(123)
int(456)
int(789)
string(3) "abc"
string(3) "def"

【讨论】:

  • 非常接近。我希望 php 会提供 extract ($array, $array_of_keys_to_extract) 以保持它的简短。对于 Jeff 保留数组的建议,即 $SERVICE['freqFirstDayOfWeek'] 我遇到了物理限制来输入所有大括号和引号......尤其是在变量数量有限的函数中......
猜你喜欢
  • 1970-01-01
  • 2022-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多