我有一个包含动态键数和数组的数组。元素。我还有一个包含strpos值的数组,但它与其他数组具有相同的键。
我想要做的是将函数substr用于第一个数组的所有元素,其中 needleS 将是第二个数组的元素。这是与我的类似的示例数组。 (请注意这些元素的关键数字总是动态的,我需要一个动态函数,而不是静态函数。)
Array
(
[213] => Dark Kiwi
[451] => Dark Apple
[789] => For Real Dark Apple
)
现在因为我想删除“黑暗”这个词之前的所有内容,我在这些元素中使用了“黑暗”这个词。
Array
(
[213] => 0
[451] => 0
[789] => 12
)
请注意,两个阵列中的键都相同。我需要的是这样的:
aFunctionToSubstrArray($firstArray,$secondArray)
非常感谢所有帮助,感谢您的时间。 PHP版本:5.6
答案 0 :(得分:0)
您可以使用array_map功能返回您需要的功能,如下所示
$a1 = array(213 => 'Dark Kiwi', 451 => 'Dark Apple', 789 => 'For Real Dark Apple');
$a2 = array(213 => 0, 451 => 0, 789 => 12);
function aFunctionToSubstrArray($a1, $a2) {
return array_map(function($val) use ($a1, $a2) {
$key = array_search($val, $a1);
return substr($val, $a2[$key]);
}, $a1);
}
答案 1 :(得分:0)
您的12
子字符串应为9。
否则,您可能正在寻找array_map:
<?php
$firstArray = [
213 => 'Dark Kiwi',
451 => 'Dark Apple',
789 => 'For Real Dark Apple'
];
$secondArray = [
213 => 0,
451 => 0,
789 => 9
];
function aFunctionToSubstrArray($firstArray,$secondArray)
{
// Note this loses your keys because array_map is being used with two parameters
return array_map(function($first,$second)
{
return substr($first,$second);
},$firstArray,$secondArray);
}
echo '<pre>',print_r(aFunctionToSubstrArray($firstArray,$secondArray),true),'</pre>';
如果您需要保留12,并且需要保留密钥,则可以使用此方法:
<?php
$firstArray = [
213 => 'Dark Kiwi',
451 => 'Dark Apple',
789 => 'For Real Dark Apple'
];
$secondArray = [
213 => 0,
451 => 0,
789 => 12
];
function aFunctionToSubstrArray($firstArray,$secondArray)
{
foreach($firstArray as $k=>$v)
{
$firstArray[$k]=substr($v,$secondArray[$k] == 0 ? 0 : $secondArray[$k]-3);
}
return $firstArray;
}
echo '<pre>',print_r(aFunctionToSubstrArray($firstArray,$secondArray),true),'</pre>';
或者一步到位:
<?php
$ar = [
213 => 'Dark Kiwi',
451 => 'Dark Apple',
789 => 'For Real Dark Apple'
];
echo '<pre>',print_r(array_map(function($el)
{
return substr($el,strpos($el,'Dark'));
},$ar),true),'</pre>';
regexp也可能比substr和strpos更有意义,具体取决于你要做的事情:
<?php
$ar = [
213 => 'Dark Kiwi',
451 => 'Dark Apple',
789 => 'For Real Dark Apple'
];
echo '<pre>',print_r(array_map(function($el)
{
return preg_replace('/^.*?(Dark.*$)/','$1',$el);
},$ar),true),'</pre>';
以上所有代码都在phptester.net上进行了测试
答案 2 :(得分:0)
使用标准PHP结构编写该函数很简单。我只是给你留下代码。只要问一下是否有任何不熟悉的事情。
aFunctionToSubstrArray($firstArray, $secondArray) {
$return = array();
foreach ($firstArray as $key => $value) {
$result[$key] = isset($secondArray[$key] ? substr($value,$secondArray[$key]) : $value;
}
return $return;
}
答案 3 :(得分:0)
使用foreach()
函数执行此操作:
aFunctionToSubstrArray(&$a,$p) {
foreach($a as $i => $el) {
$a[$i] = substr($el, $p[$i]);
}
}
然后你只需申请:
aFunctionToSubstrArray($firstArray,$secondArray)