已知一个数组如下所示:
<?php
$in = array(
0  =>  '一',
1 => '一二',
2 =>  '一二八九',
3 => '一二阿拉斯加',
4 =>  '五',
5  => '五六',
6  => '五六七',
7  => '五六七八',
8  =>  '大家',
9  => '大家好',
10  =>  '坦克',
11  => '他',
12  => '它',
);
?>要求输出显示结果如下所示:
$out = array(
'一' => array(0,3);
'一二' => array(1,3);
'一二八九' => array(2,2);
'一二阿拉斯加' => array(3,3);
'五' => array(4,7);
'五六' => array(5,7);
'五六七' => array(6,7);
'五六七八' => array(7,7);
'大家' => array(8,9);
'大家好' => array(9,9);
'坦克' => array(10,10);
'他' => array(11,11);
'它' => array(12,12);
);
这是面试官给我的一道题,虽然有要求让我自己做,然后发给他答案,可我想了半天,解决不了。就请各位大侠帮帮我啊。
交答案的时间已经过了。小妹没解决了这道题,心里总想着不舒服,所以来求大侠们帮助!!

解决方案 »

  1.   

    $in和$out的關係是這樣的:
    $out輸出的值為$in中數組的結果值所在的下標範圍比如:'一' 存在於$in數組的0~3的下標中
      

  2.   

    foreach ($in as $key => $value)
    {
      $seavalue=$value;
      $bpos='';
      $epos='';
      $i=0;
      foreach ($in as $key1 => $value1)
      {
         if (strripos($value1, $seavalue))
         {
           if($bpos=='')
              $bpos=$i;
           else  
              $epos=$i;
         }
         $i++;
      }
      if ($epos=='')
         $epos=$bpos;
      $out[$value]=array($epos,$bpos);
    }未經測試
      

  3.   


    $in = array( 
    0 =>'一', 
    1 =>'一二', 
    2 =>'一二八九',
    3 =>'一二阿拉斯加',
    4 =>'五',
    5 =>'五六',
    6 =>'五六七',
    7 =>'五六七八',
    8 =>'大家', 
    9 =>'大家好',
    10 =>'坦克',
    11 =>'他',
    12 =>'它'
    ); 
    $output=array();
    foreach($in as $value)
    {
    $output[$value]=array();
    foreach($in as $key=>$value1)
      {
      if(strpos($value1,$value)===0)
        {
          if(count($output[$value])==0)
      array_push($output[$value],$key);
      else
      array_pop($output[$value]);
      array_push($output[$value],$key);
        }
      }
    }
    echo "<pre>";
    print_r($output);
    echo "</pre>";测试OK
      

  4.   

    看来我动作比较慢哈。
    我也写了一段,LZ参考参考吧。测试OK<?php$in = array(
    0 => '一',
    1 => '一二',
    2 => '一二八九',
    3 => '一二阿拉斯加',
    4 => '五',
    5 => '五六',
    6 => '五六七',
    7 => '五六七八',
    8 => '大家',
    9 => '大家好',
    10 => '坦克',
    11 => '他',
    12 => '它',
    );$out = array();
    $end = 0;
    $length = count($in);
    for ($i=0; $i<$length; $i++){
    for ($p=0; $p<$length; $p++){
    if(strstr($in[$p], $in[$i])){
    $out[$in[$i]] = array($i,$p);
    }
    }
    }print_r($out);?>
      

  5.   

    4L我写的代码中$end = 0 没用,忘记删掉了。
      

  6.   

    应该有更好的答案$in = array(
    0 => '一',
    1 => '一二',
    2 => '一二八九',
    3 => '一二阿拉斯加',
    4 => '五',
    5 => '五六',
    6 => '五六七',
    7 => '五六七八',
    8 => '大家',
    9 => '大家好',
    10 => '坦克',
    11 => '他',
    12 => '它',
    ); 
    foreach($in as $k=>$v)
    {
    $n[$v] = array($k,$k);
    $i = $k;
    while($i--)
    {
    if(strpos($v,$in[$i]) !== false)
    $n[$in[$i]][1]+=1;

    }
    }
    echo "<pre/>";
    print_r($n);
      

  7.   

    比较取巧$in = array(
    0 => '一',
    1 => '一二',
    2 => '一二八九',
    3 => '一二阿拉斯加',
    4 => '五',
    5 => '五六',
    6 => '五六七',
    7 => '五六七八',
    8 => '大家',
    9 => '大家好',
    10 => '坦克',
    11 => '他',
    12 => '它',
    ); 
    foreach($in as $k=>$v)
    {
    $ak = array_keys(preg_grep("/$v/i",$in));
    $n[$v] = array(min($ak),max($ak));
    }
    echo "<pre/>";
    print_r($n);