php 根据每个元素的第一个字符将数组拆分为两个数组

bqjvbblv  于 2023-10-15  发布在  PHP
关注(0)|答案(5)|浏览(99)

我有一个由字符串值组成的基于null的数组:

array
  0 => string 'Message 1' (length=9)
  1 => string '%company' (length=8)
  2 => string 'Message 2' (length=9)
  3 => string '%name' (length=5)

我需要选择所有以%开始的值,并理想地将它们放入另一个数组中。

array
  0 => string 'Message 1' (length=9)
  1 => string 'Message 2' (length=9)

array
  0 => string '%company' (length=8)
  1 => string '%name' (length=5)

第一个数组是一个验证函数的结果,因为我讨厌,当验证器在一百万行中返回所需输入的信息时(比如:this is required <br><br> that is required.),而不是输出真实的消息,我想输出所需的和未填充的输入的名称,将其放入一个很好的消息“Fields this,that and even that are mandatory”。

hfwmuf9z

hfwmuf9z1#

PHP >5.3,下面需要使用create_function()
此解决方案首先筛选原始数组,并获取开始为%的项。然后使用array_diff()来获取具有剩余值的数组。

$array_percent = array_filter($orig_array, function ($v) {
  return substr($v, 0, 1) === '%';
});

$array_others = array_diff($orig_array, $array_percent);
um6iljoc

um6iljoc2#

很抱歉重新提出这个问题,但是像这样简单的过滤在preg_grep()上是超级简单的。

$subject  = array('Message 1', '%company', 'Message 2', '%name');

$percents = preg_grep('/^%/', $subject);
$others   = preg_grep('/^%/', $subject, PREG_GREP_INVERT); 

var_dump($percents, $others);
ebdffaop

ebdffaop3#

这是一些使用array_walk()和匿名回调的简单分区代码。

$result1 = array();
$result2 = array();
array_walk($array, function($v) use (&$result1, &$result2) {
    if ($v[0] == '%') {
        $result1[] = $v;
    } else {
        $result2[] = $v;
    }
});

把它放到一些可重用的代码中:

function partition($array, $callback) {
    $resultTrue  = array();
    $resultFalse = array();
    array_walk($array, function($v) use (&$resultTrue, &$resultFalse, $callback) {
        if (call_user_func($callback, $v) === true) {
            $resultTrue[] = $v;
        } else {
            $resultFalse[] = $v;
        }
    });
    return array($resultTrue, $resultFalse);
}

// and put to use:
$partitionedData = partition($array, function($v) {
    return $v[0] == '%';
});
w6mmgewl

w6mmgewl4#

可以将array_filtercallback一起使用,

<?php
$array = array(
  0 => 'Message 1' ,
  1 => '%company' ,
  2 => 'Message 2' ,
  3 => '%name' );

  function start_with($var)
  {
      return $var[0] == '%';
  }

  function dont_start_with($var)
  {
      return $var[0] != '%';
  }

  $startw = array_filter($dizi,'start_with'); // filtering elements
  $startw = array_values($startw);  // reseting indexes.

  $nstartw = array_filter($dizi,'dont_start_with');
  $nstartw = array_values($nstartw);

  var_dump($startw , $nstartw);
?>
f2uvfpb9

f2uvfpb95#

$array2=array();
foreach($array as $key => $value)
{
   if($value[0] =='%')
   { 
     $array2[]=$value;
     unset($array[$key]);
   }
}

编辑

在unset之后,你可以使用foreach循环来构造新的数组,也可以使用array_values函数来构造新的数组

相关问题