具有strpos值数组的数组的子串元素

时间:2017-12-10 22:14:25

标签: php

我有一个包含动态键数和数组的数组。元素。我还有一个包含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

4 个答案:

答案 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)