如何使用条件替换数组值?

时间:2013-11-15 09:43:58

标签: php arrays

抱歉我的头衔。我只是不知道怎么问这个。为了简化故事,我只需要替换数组的某个部分。假设我们有这个数组:

Array
(
      [0] => Array
        (
            [restaurant_id] => 1236
            [new_lat] => 76
            [new_long] => 86
            [date_updated] => 2013-11-15 17:20:58
        )

      [1] => Array
        (
            [restaurant_id] => 1247
            [new_lat] => 6
            [new_long] => 5
            [date_updated] => 2013-11-15 17:20:58
        )

      [2] => Array
        (
            [restaurant_id] => 7456
            [new_lat] => 21
            [new_long] => 12
            [date_updated] => 2013-11-15 17:20:58
        )

)

现在我需要用这个替换索引2:

Array(
     [2] => Array
        (
            [restaurant_id] => 1236
            [new_lat] => 2
            [new_long] => 1
            [date_updated] => 2013-11-15 17:20:58
        )
)

如果我发现有一个现有的restaurant_id,我需要更换。 如果有。更新那一行。我没有添加新阵列。

我有个主意,但我不知道该怎么做。我的想法是:

  1. 反序列化数组(因为我的数组是序列化形式)

  2. 找到目标索引。如果找到则删除该索引并添加我的新索引 索引到数组的底部然后再次序列化它。如果没有找到 仅添加在数组的底部并序列化。

  3. 我只是不知道我是否删除了索引。如果索引将自动移动。意味着如果我删除索引2,索引3将成为索引2,我的新数组将是索引3。

    好的,这是所有人。感谢。

5 个答案:

答案 0 :(得分:2)

获取包含目标元素的引用变量并进行修改。

foreach ($myArray as $myKey => &$myElement) 
{
 if ($myElement['restaurant_id'] == WHAT_IM_LOOKING_FOR)
 {
  $myElement['new_lat'] = ...;
  ...;
 }
}

答案 1 :(得分:1)

你不必删除该索引;只是覆盖它。

  1. 解序列化

  2. 找到目标索引。如果找到,只需覆盖(不删除)。如果找不到,只需使用[]添加到最后。

  3. 覆写:

    $my_array[2] = array(
        'restaurant_id' => 1236,
        'new_lat' => 2,
        'new_long' => 1,
        'date_updated' => '2013-11-15 17:20:58'
    );
    

    此代码将使用此新代码覆盖您的索引2。你以前不需要取消它。

答案 2 :(得分:1)

如果restaurant_id是一个唯一的ID,如果你重新组织它,那么处理该数组要容易得多:

Array
(
      [1236] => Array
        (
            [new_lat] => 76
            [new_long] => 86
            [date_updated] => 2013-11-15 17:20:58
        )

      [1247] => Array
        (
            [new_lat] => 6
            [new_long] => 5
            [date_updated] => 2013-11-15 17:20:58
        )

      [7456] => Array
        (
            [new_lat] => 21
            [new_long] => 12
            [date_updated] => 2013-11-15 17:20:58
        )

)

之后,您可能会发现

更容易访问
 ... isset($arr[$restaurantId]) ....

$arr[$restaurantId] = array('new_lat' => 42, .... )

将插入/更新有关条目是否存在的任何知识。

答案 3 :(得分:0)

好的,取消设置带有id的元素,然后求助,然后添加一个新元素:

    unset($array[2]); // unset number 2
    $array = array_values($array); // resort
    $array[] = $newStuff; // add
祝你好运

答案 4 :(得分:0)

如果使用unset函数,索引将保持为空。

例如,如果你的$数组有4个值,0 1 2 3,如果你取消设置索引2,索引3将保持3,并且对数组的新添加将是索引4.

以下代码将说明这一点:

$a = array("zero", "one", "two", "three");
var_dump($a);
unset($a[2]);
var_dump($a);
$a[]="four";
var_dump($a);