php - 在循环时创建关联数组

时间:2012-02-28 22:53:54

标签: php loops foreach while-loop associative-array

我正在尝试使用以下“foreach”循环从一个现有数组($ array)中创建2个新数组。但是我不确定它是否正确:

        $emails = array();
        $numbers = array();
        while($array){
            $entry = $array['entry1'];
            $number = number($entry);
            if(isset($number) && (strlen($number) > 9)){
                $numbers[] = array('entry1' => $entry, 'number' => $number);
            }
            else{
                $email = email($entry);
                $emails[] = array('entry1' => $entry, 'email' => $email);
            }
        }

内部数组应该[]吗? 我甚至需要在while循环之外启动数组吗?或者跳过它? 使用foreach循环是否更好?

更新

好的,这是原始数组:它是从mysql查询中提取的,包含两个数字的集合:

{('uid1','uid2'),('uid1','uid5'),('uid9','uid93'),....) 每行中可能还有其他数据,但这些只是真正重要的两个数据点。

我想要做的是针对特定用户($ entry),创建两个单独的数组:所有拥有数字的用户(这是我们拥有的功能)以及其他所有电子邮件。 所以结果将是2个新的数组,看起来像这样: 对于特定的uid79887

numbers array: {('uid8','xxx-xxxx-xxx'),('uid34','yyy-yyyy-yyy'),('uid654','vvv-vvvv-vvv')}

emails array: {('uid4','mmm@mmm.com'),('uid1','lll@lll.com'),('uid55554','ppp@ppp.com')}

3 个答案:

答案 0 :(得分:3)

首先要做的事情很少:

  • 初始化变量是一种很好的做法,只需这样做(它有很多好处)。
  • while($array)是什么类型的考试?如果要从数组中删除项目,则应使用foreach( $array as $entry)while( count( $array))
  • 为什么要在isset( $number)始终设置时对其进行测试?它是初始化的变量。您可能正在查看null,因此请使用!is_null()($number !== null)。即使它起作用也会产生误导。

猜测您的代码应如下所示:

$emails = array();
$numbers = array();
foreach( $array as $entry){
    $entry = isset( $entry['entry1']) ? $entry['entry1'] : null;
    $number = number( $entry);
    if( strlen($number) > 9 ){ // If $number is empty it will have strlen < 1 .)
       $numbers[] = array('entry1' => $entry, 'number' => $number);
    } else {
       $emails[] = array('entry1' => $entry, 'email' => email( $entry));
    }
}

答案 1 :(得分:1)

我想这就是你想要实现的目标:

$emails = $numbers = Array();
foreach($array as $item) {
  $e = $item['entry1'];
  $number = number($e);
  if(strlen($number) > 9) {
    $numbers[] = Array('entry1' => $e, 'number' => $number);
  }
  else {
    $email = email($entry);
    $emails[] = Array('entry1' => $e, 'email' => $email);
  }
}

在你的代码中,while($ array)不在数组上循环,它循环直到$ array == false 因为$ array不会在你的循环中改变它将永远不会进入或循环,或永远不会退出 通常,使用foreach循环可以使代码更容易理解

答案 2 :(得分:0)

假设这不是某种家庭作业,为什么不这样做呢:

$emails = array();
$numbers = array();

foreach( $array as $entry )
{
    $number = number($entry);
    if( $number && strlen($number) > 9 )
    {
        array_push($numbers, array('entry1' => $entry, 'number' => $number));
    }
    else
    {
        array_push($emails, array('entry1' => $entry, 'email' => email($entry)));
    }
}

最好使用试图自己动手的内置函数。 foreach()功能非常有效。